Können wir ein Array einer Sammlung haben?

8

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?

    
sumit sharma 07.01.2013, 08:49
quelle

6 Antworten

5

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%     
Dmitry Zaytsev 07.01.2013, 08:51
quelle
1

ArrayList ist intern selbst ein 1D-Array. Was Sie 2D-Array brauchen, damit Sie

erstellen können %Vor%

oder

%Vor%     
Subhrajyoti Majumder 07.01.2013 08:57
quelle
1

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

tun %Vor%

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%     
Carlos Heuberger 07.01.2013 10:54
quelle
0

Sie könnten so etwas tun

%Vor%     
Suranga 07.01.2013 08:55
quelle
0

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.

    
Andrii Polunin 07.01.2013 09:26
quelle
0

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

    
Skepi 07.01.2013 09:23
quelle

Tags und Links