web-dev-qa-db-fra.com

Erreur de création de tableau générique

J'essaie de faire quelque chose comme ça: -

public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];

myObject est une classe. Je reçois cette erreur: - Création d'un tableau générique (la flèche pointe vers nouveau.)

41
Harshveer Singh

Vous ne pouvez pas avoir de tableaux de classes génériques. Java ne le supporte tout simplement pas.

Vous devriez envisager d'utiliser une collection au lieu d'un tableau. Par exemple,

public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>();

Une autre "solution de contournement" consiste à créer une classe auxiliaire comme celle-ci.

class MyObjectArrayList extends ArrayList<MyObject> { }

puis créez un tableau de MyObjectArrayList.


Voici un bon article expliquant pourquoi cela n'est pas autorisé dans la langue. L'article donne l'exemple suivant de ce qui pourrait arriver s'il était autorisé:

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

Il existe un moyen plus simple de créer des tableaux génériques que d'utiliser List.

Tout d'abord, laissez

public static ArrayList<myObject>[] a = new ArrayList[2];

Ensuite, initialisez

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

Tu peux faire

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

ou

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

(Le premier est probablement meilleur.) Les deux provoqueront des avertissements non vérifiés, que vous pouvez à peu près ignorer ou supprimer en utilisant: @SuppressWarnings ("non vérifiée")

5
newacct