Initialiser ArrayList<ArrayList<Integer>>
J'ai rencontré un problème comme suit:
Lorsque j'initialise un ArrayList<ArrayList<Integer>>
, les codes sont:
ArrayList<ArrayList<Integer>> group = new ArrayList<ArrayList<Integer>>();
group.add((ArrayList<Integer>) Arrays.asList(1, 2, 3));
group.add((ArrayList<Integer>) Arrays.asList(4, 5, 6));
group.add((ArrayList<Integer>) Arrays.asList(7, 8, 9));
for (ArrayList<Integer> list : group) {
for (Integer i : list) {
System.out.print(i+" ");
}
System.out.println();
}
Bien que le code peut être compilé correctement, je reçois toujours une exception sur la console:
Exception in thread "main" java.lang.ClassCastException: java.util.Tableaux$ArrayList ne peut pas être lancé à java.util.ArrayList
à la Solution.principale(la Solution.java:49)
Merci pour l'aide !
- Ce qui me frappe comme quelque chose qui doit être pris au moment de la compilation. Qu'est-ce qui a forcé cast?
Vous devez vous connecter pour publier un commentaire.
Arrays.asList
ne retourne pas unejava.util.ArrayList
. Il ne retourner une instance d'une classe appeléeArrayList
, comme par hasard - mais ce n'est pasjava.util.ArrayList
.À moins que vous besoin ce vraiment un
ArrayList<ArrayList<Integer>>
je venais de le modifier:Si vous ne besoin d'un
ArrayList<ArrayList<...>>
- ou si vous avez besoin d'être en mesure d'ajouter à la "intérieure" des listes, même si vous n'en avez pas besoin, avec un type statique deArrayList
- ensuite, vous aurez besoin de créer un nouveauArrayList
pour chaque liste:Le retour de
Arrays.asList
n'est pas unjava.util.ArrayList
; lajava.util.Arrays$ArrayList
est une catégorie distincte, imbriquée dansArrays
, même si c'est unList
.Si vous devez avoir un
ArrayList
, puis créer un autreArrayList
vous-même à l'aide de l'retournéList
deArrays.asList
, au lieu de la coulée, par exemple:Arrays.asList
retourne une instance d'une étude de type statiquejava.util.Arrays.ArrayList
qui est différent dejava.util.ArrayList
. Vous pouvez éviter ce problème en programmation à l'List
de l'interface (quijava.util.Arrays.ArrayList
met en œuvre en tant que bien), et sans la inutiles jette:Veuillez consulter ce code. Cela peut vous aider à atteindre votre condition.