J'essaye de faire quelque chose comme ça :-
public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];
monObjet est une classe. J'obtiens cette erreur : - Création d'un tableau générique (la flèche pointe vers new.)
J'essaye de faire quelque chose comme ça :-
public static ArrayList<myObject>[] a = new ArrayList<myObject>[2];
monObjet est une classe. J'obtiens cette erreur : - Création d'un tableau générique (la flèche pointe vers new.)
Vous ne pouvez pas avoir de tableaux de classes génériques. Java ne le prend tout simplement pas en charge.
Vous devriez envisager d'utiliser une collection plutôt qu'un tableau. Par exemple,
public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>();
Une autre solution consiste à créer une classe auxiliaire comme ceci
class MyObjectArrayList extends ArrayList<MyObject> { }
et ensuite créer un tableau de MyObjectArrayList
.
Voici un bon article sur la raison pour laquelle cela n'est pas autorisé dans la langue. L'article donne l'exemple suivant de ce qui pourrait se passer si cela é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);
Vous pouvez faire
public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList<?>[2];
o
public static ArrayList<myObject>[] a = (ArrayList<myObject>[])new ArrayList[2];
(La première est probablement meilleure.) Les deux provoqueront des avertissements non vérifiés, que vous pouvez pratiquement ignorer ou supprimer en utilisant : @SuppressWarnings("unchecked")
Si vous essayez de déclarer une liste de tableaux de votre classe générique, vous pouvez essayer :
public static ArrayList<MyObject> a = new ArrayList<MyObject>();
ceci vous donnera une liste de tableaux de monobjet (taille 10), ou si vous avez seulement besoin d'une liste de tableaux de taille 2, vous pouvez le faire :
public static ArrayList<MyObject> a = new ArrayList<MyObject>(2);
ou vous essayez peut-être de créer une liste de tableaux de listes de tableaux :
public static ArrayList<ArrayList<MyObject>> a = new ArrayList<ArrayList<MyObject>>();
bien que je ne sois pas sûr que la dernière chose que j'ai dite soit correcte...
Il me semble que vous utilisez le mauvais type de parenthèse. La raison pour laquelle vous ne pouvez pas définir un tableau de génériques est la suivante effacement de type .
De plus, la déclaration de votre variable "a" est fragile, elle devrait ressembler à ça :
List<myObject>[] a;
N'utilisez pas une classe concrète lorsque vous pouvez utiliser une interface.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.