Ich habe versucht, ein Array einer Sammlung wie folgt zu erstellen.
%Vor%aber es gibt mir einen Fehler - & gt; Generische Array-Erstellung Kann mir jemand erklären warum?
Sie können keine Arrays generischer Typen erstellen. Verwenden Sie stattdessen die Sammlung von Sammlungen:
%Vor%Warum können wir kein generisches Array erstellen? Array speichert den genauen Typ intern, aber aufgrund der Typlöschung zur Laufzeit gibt es keinen generischen Typ. Um zu verhindern, dass Sie dadurch getäuscht werden (siehe Beispiel unten), können Sie kein Array generischen Typs erstellen:
%Vor% ArrayList
ist intern selbst ein 1D-Array. Was Sie 2D-Array brauchen, damit Sie
oder
%Vor% Tatsächlich können Sie ein Array von Sammlung haben, es ist einfach nicht erlaubt, dass die Sammlung einen bestimmten Typ hat.
Sie können etwas wie
Aber Sie werden nicht die Vorteile von Generics haben - es gibt keine Typinformationen für den Inhalt der Sammlung, Sie müssen beim Lesen von ihr werfen
%Vor%Die Antwort auf Ihre Frage finden Sie in der Java-Sprachspezifikation. Sie versuchen, ein Array mithilfe von Array Creation Expression . Es sagt folgendes: "Es ist ein Fehler bei der Kompilierung, wenn der ClassOrInterfaceType keinen verifizierbaren Typ angibt". Da Arrays in Java zur Laufzeit erstellt werden, sollten ihre Typinformationen zur Laufzeit vollständig verfügbar sein. Mit anderen Worten, Array-Elementtyp sollte ein verifizierbarer Typ sein . Generics in Java werden mit type errasure implementiert (d. H. Nur eine Teilmenge von generics-Informationen zum Kompilierungszeitpunkt ist zur Laufzeit verfügbar). Daher sind sie nicht definierbar und daher können Sie keine Arrays generischer Typen erstellen.
Sie können ein Array "technisch" vom Typ ArrayList haben, aber es ist ein bisschen pingelig. Erstellen Sie es als ArrayList<ArrayList<Integer>> list = ArrayList<ArrayList<Integer>();
und konvertieren Sie es mit toArray(ArrayList<Integer>[list.size()]);
.
Beispiel:
%Vor%Ausgabe:
%Vor%Funktioniert und ist ein ArrayList-Array
Tags und Links java arrays collections