„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum können Arrays in Java keine generischen Elemente enthalten?

Warum können Arrays in Java keine generischen Elemente enthalten?

Veröffentlicht am 18.11.2024
Durchsuche:953

Why Can\'t Arrays Hold Generic Items in Java?

Können Arrays generische Elemente enthalten?

Generische Typen und Arrays können in Java unterschiedlich interagieren. Betrachten Sie den folgenden Code:

ArrayList a = new ArrayList();

Dieser Code wird erfolgreich kompiliert und erstellt eine generische ArrayList mit dem Namen a. Der folgende Code kann jedoch nicht kompiliert werden:

ArrayList[] a = new ArrayList[10];

Warum ist das so? Es scheint, dass Arrays und Generika nicht kompatibel sind. Um dies zu verstehen, untersuchen wir die Typlöschung in Java.

Typlöschung: Hinter den Kulissen

Wenn Java kompiliert wird, führt es eine Typlöschung durch, die generische Typinformationen durch ersetzt Rohtypen (Objekt). Dies verhindert Fehler wie das Platzieren eines Strings in einer ArrayList of Integers. Allerdings erfordern Arrays einen Rohtyp, und Generika können nicht als Rohtypen dargestellt werden.

Beheben des Array-Problems

Um ein Array generischer Elemente zu erstellen, können Sie dies explizit tun Wandeln Sie das Array in den gewünschten Typ um:

ArrayList[] a = (ArrayList[]) new ArrayList[10];

Diese Umwandlung weist den Compiler an dass das Array als Array von ArrayLists mit Schlüsselelementen betrachtet werden sollte.

Liste von Listen: Die Ausnahme

In Java wird eine Liste von Listen nicht als Array betrachtet . Daher wird der folgende Code ohne Typumwandlung kompiliert:

ArrayList> b = new ArrayList>();

Diese Unterscheidung ergibt sich aus ArrayList ist ein Nicht-Array-Typ.

Schlussfolgerung

Arrays und generische Typen unterliegen in Java aufgrund der Typlöschung Einschränkungen. Indem man Arrays jedoch explizit in den gewünschten generischen Typ umwandelt oder Listen mit Listen verwendet, kann man diese Einschränkungen umgehen und generische Typen in beiden Kontexten effektiv verwenden.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3