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.
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