Erro de criação de matriz genérica

Eu estou tentando fazer algo assim:

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

myObject é uma class. Estou recebendo este erro: – Criação de matriz genérica (seta está apontando para novo.)

Você não pode ter matrizes de classs genéricas. Java simplesmente não suporta isso.

Você deve considerar usar uma coleção em vez de uma matriz. Por exemplo,

 public static ArrayList> a = new ArrayList(); 

Outra “solução” é criar uma class auxiliar como esta

 class MyObjectArrayList extends ArrayList { } 

e, em seguida, crie uma matriz de MyObjectArrayList .


Aqui está um bom artigo sobre por que isso não é permitido no idioma. O artigo dá o seguinte exemplo do que poderia acontecer se fosse permitido:

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

Existe uma maneira mais fácil de criar matrizes genéricas do que usando List.

Primeiro, vamos

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

Então inicialize

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

Você pode fazer

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

ou

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

(O primeiro provavelmente é melhor.) Ambos causarão avisos desmarcados, que você pode ignorar ou suprimir usando: @SuppressWarnings (“unchecked”)

Se você está tentando declarar um arraylist da sua class genérica, você pode tentar:

 public static ArrayList a = new ArrayList(); 

isto lhe dará um arraylist de myobject (tamanho 10), ou se vc precisar apenas de um arraylist de tamanho 2 você pode fazer:

 public static ArrayList a = new ArrayList(2); 

ou você pode estar tentando fazer um arraylist de arraylists:

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

embora eu não tenho certeza se o último que eu disse está correto …

Parece-me que você usa o tipo errado de parênteses. A razão pela qual você não pode definir um array genérico é o tipo de apagamento .

Além disso, a declaração de você variável “a” é frágil, deve parecer assim:

 List[] a; 

Não use uma class concreta quando você puder usar uma interface.