Heim  >  Artikel  >  Java  >  Warum kann ich in Java kein Array generischer Listen erstellen?

Warum kann ich in Java kein Array generischer Listen erstellen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 17:24:30188Durchsuche

Why Can't I Create an Array of Generic Lists in Java?

Generische Arrays und das Geheimnis der Typlöschung

Bei der Arbeit mit Generika kann es verwirrend sein, warum einige Array-Deklarationen zulässig sind und andere nicht 'T. Bedenken Sie Folgendes:

ArrayList<Key> a = new ArrayList<Key>(); // Compiles fine

Dieser Code lässt sich ohne Probleme kompilieren. Wenn es jedoch um Arrays generischer Listen geht:

ArrayList<Key>[] a = new ArrayList<Key>[10]; // Compiler error

beschwert sich der Compiler. Warum ist das so?

Die Rolle der Typlöschung

Dieses Problem ergibt sich aus dem Konzept der Typlöschung in Java. Wenn ein generischer Typ kompiliert wird, werden seine Typparameter entfernt und durch Rohtypen ersetzt. Dies bedeutet, dass zur Laufzeit alle generischen Typen als ihre entsprechenden Rohtypen behandelt werden.

Im ersten Beispiel wird ArrayList ist ein generischer Typ, wird aber zur Laufzeit als ArrayList behandelt. Ein kann also ArrayList-Objekte mit Elementen vom Typ Key enthalten.

Allerdings ist ein Array eine andere Geschichte. Jedes Element eines Arrays muss denselben Typ haben. ArrayList[] würde also erfordern, dass seine Elemente ArrayList sind, was kein Rohtyp ist. Durch die Typlöschung kann der generische Parameter nicht entfernt werden, wodurch diese Deklaration illegal wird.

Behebung des Problems

Um das Problem zu beheben, kann man das Array in einen expliziten Rohtyp umwandeln:

ArrayList<Key>[] a = (ArrayList<Key> []) new ArrayList[10];

Diese Umwandlung teilt dem Compiler im Wesentlichen mit, dass wir ein Array von rohen ArrayList-Objekten benötigen, was ein gültiger Typ ist.

Verwendung verschachtelter Listen

Eine andere Möglichkeit besteht darin, eine Liste von Listen zu verwenden:

ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();

In diesem Fall ist b eine Liste von ArrayList-Objekten, wobei jede ArrayList Elemente vom Typ Key enthalten kann. Dieser Ansatz ist legal, da ArrayList kein Array-Typ ist.

Zusätzliche Informationen

Weitere Einblicke in dieses Thema finden Sie in Kapitel 7.3 des offiziellen Java-Tutorials. Es erklärt, dass Array-Typen keine Typvariablen als Komponenten haben können, es sei denn, es handelt sich um Platzhaltertypen.

Das obige ist der detaillierte Inhalt vonWarum kann ich in Java kein Array generischer Listen erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn