Allgemeiner Array-Erstellungserrors

Ich versuche, so etwas zu tun:

public static ArrayList[] a = new ArrayList[2]; 

myObject ist eine class. Ich bekomme diesen Fehler: – generische Array-Erstellung (Pfeil zeigt auf neu.)

Sie können keine Arrays generischer classn haben. Java unterstützt das einfach nicht.

Sie sollten in Betracht ziehen, eine Sammlung anstelle eines Arrays zu verwenden. Zum Beispiel,

 public static ArrayList> a = new ArrayList(); 

Ein weiterer “Workaround” ist das Erstellen einer Hilfsklasse wie dieser

 class MyObjectArrayList extends ArrayList { } 

und dann ein Array von MyObjectArrayList .


Hier ist ein guter Artikel, warum das in der Sprache nicht erlaubt ist. Der Artikel gibt das folgende Beispiel, was passieren könnte, wenn es erlaubt wäre:

 List[] lsa = new List[10]; // illegal Object[] oa = lsa; // OK because List is a subtype of Object List li = new ArrayList(); li.add(new Integer(3)); oa[0] = li; String s = lsa[0].get(0); 

Es gibt eine einfachere Möglichkeit, generische Arrays zu erstellen als mit List.

Zuerst, lass

 public static ArrayList[] a = new ArrayList[2]; 

Dann initialisiere

 for(int i = 0; i < a.length; i++) { a[i] = new ArrayList(); } 

Du kannst tun

 public static ArrayList[] a = (ArrayList[])new ArrayList< ?>[2]; 

oder

 public static ArrayList[] a = (ArrayList[])new ArrayList[2]; 

(Ersteres ist wahrscheinlich besser.) Beide werden unkontrollierte Warnungen verursachen, die Sie ziemlich ignorieren oder unterdrücken können, indem Sie verwenden: @SuppressWarnings (“unchecked”)

Wenn Sie versuchen, eine Arraylist Ihrer generischen class zu deklarieren, können Sie versuchen:

 public static ArrayList a = new ArrayList(); 

Dies gibt Ihnen eine Arraylist von myobject (Größe 10), oder wenn Sie nur eine Arraylist der Größe 2 benötigen, können Sie tun:

 public static ArrayList a = new ArrayList(2); 

oder Sie versuchen vielleicht, eine Arraylist von Arraylisten zu machen:

 public static ArrayList> a = new ArrayList>(); 

obwohl ich nicht sicher bin, ob das letzte, was ich sagte, korrekt ist …

Es scheint mir, dass Sie die falsche Art von Klammern verwenden. Der Grund, warum Sie ein generisches Array nicht definieren können, ist das Löschen von Typen .

Außerdem ist die Deklaration der Variablen “a” fragil, es sollte so aussehen:

 List[] a; 

Verwenden Sie keine konkrete class, wenn Sie eine Schnittstelle verwenden können.