Errore di creazione di array generico

Sto provando a fare qualcosa del genere: –

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

myObject è una class. Sto ottenendo questo errore: – Creazione di un array generico (la freccia punta verso il nuovo).

Non puoi avere matrici di classi generiche. Java semplicemente non lo supporta.

Dovresti prendere in considerazione l’utilizzo di una raccolta invece di una matrice. Per esempio,

 public static ArrayList> a = new ArrayList(); 

Un’altra “soluzione” è creare una class ausiliaria come questa

 class MyObjectArrayList extends ArrayList { } 

e quindi creare una matrice di MyObjectArrayList .


Ecco un buon articolo sul perché questo non è permesso nella lingua. L’articolo fornisce il seguente esempio di cosa potrebbe accadere se fosse consentito:

 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); 

C’è un modo più semplice per creare array generici rispetto all’utilizzo di List.

Innanzitutto, lascia

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

Quindi inizializzare

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

Tu puoi fare

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

o

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

(Il primo è probabilmente migliore.) Entrambi causeranno avvertimenti non controllati, che puoi ignorare o sopprimere praticamente usando: @SuppressWarnings (“deselezionato”)

se stai cercando di dichiarare un arraylist della tua class generica puoi provare:

 public static ArrayList a = new ArrayList(); 

questo ti darà un arraylist di myobject (taglia 10), o se hai solo bisogno di un arraylist di taglia 2 puoi fare:

 public static ArrayList a = new ArrayList(2); 

o potresti provare a creare un arraylist di arraylists:

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

anche se non sono sicuro che l’ultimo che ho detto sia corretto …

Mi sembra che tu usi il tipo sbagliato di parentesi. Il motivo per cui non è ansible definire un array di generici è la cancellazione del tipo .

Inoltre, la dichiarazione della variabile “a” è fragile, dovrebbe apparire in questo modo:

 List[] a; 

Non utilizzare una class concreta quando è ansible utilizzare un’interfaccia.