Heim >Java >javaLernprogramm >Warum verursacht das Erstellen eines Arrays generischer Listen in Java einen Compilerfehler?

Warum verursacht das Erstellen eines Arrays generischer Listen in Java einen Compilerfehler?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 23:16:31668Durchsuche

Why Does Creating an Array of Generic Lists in Java Cause a Compiler Error?

Arrays generischer Listen

In Java kann die Verwendung von Generika und Arrays eine Herausforderung darstellen. Während bestimmte Konstruktionen gültig erscheinen, kann der Compiler Einwände erheben.

Betrachten Sie das folgende Beispiel:

<code class="java">ArrayList<Key> a = new ArrayList<Key>(); // Compiles without issue</code>

Beim Versuch, ein Array generischer Listen zu erstellen:

<code class="java">ArrayList<Key>[] a = new ArrayList<Key>[10]; // Compiler error</code>

Dieser Fehler entsteht durch Typlöschung. Um das Problem zu lösen, kann man das Array entweder wie folgt umwandeln:

<code class="java">ArrayList<Key>[] a = (ArrayList<Key>[]) new ArrayList[10];</code>

Oder eine Liste von Listen verwenden:

<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>(); // No error</code>

Um die Gründe für diese Beobachtungen zu verstehen, ist es wichtig, sie zu verstehen Javas Typlöschmechanismus. Während der Kompilierung werden die Typinformationen für generische Typen gelöscht, sodass sie als ihre rohen Gegenstücke behandelt werden. Dies liegt daran, dass Arrays nur mit Rohtypen funktionieren können.

Im ersten Beispiel ist ArrayList wird in ArrayList gelöscht, was ein gültiger Rohtyp ist. Im zweiten Beispiel stößt der Compiler jedoch auf einen unzulässigen Rohtyp ArrayList[]. Die verwendete Umwandlung stellt sicher, dass der Komponententyp des resultierenden Arrays mit dem definierten Typ übereinstimmt.

Der Listen-Listen-Ansatz beseitigt diese Probleme, da ArrayList kein Array ist und daher nicht denselben Einschränkungen unterliegt.

Das obige ist der detaillierte Inhalt vonWarum verursacht das Erstellen eines Arrays generischer Listen in Java einen Compilerfehler?. 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