J'utilise une ArrayList et j'essaie d'en copier une partie dans une autre ArrayList, donc j'utilise:
sibling.keys = (ArrayList<Integer>) keys.subList(mid, this.num);
Où "sibling.keys" est le nouveau ArrayList et "keys or this.keys" est l'ancien ArrayList. J'ai utilisé le casting, car Eclipse m'a dit de le faire, mais il lance un ClassCastException
:
Java.util.ArrayList $ SubList ne peut pas être converti en Java.util.ArrayList
Aucun conseil?
subList
renvoie un affichage sur une liste existante. Ce n'est pas un ArrayList
. Vous pouvez en créer une copie:
sibling.keys = new ArrayList<Integer>(keys.subList(mid, this.num));
Ou si vous êtes satisfait du comportement d'affichage, essayez de changer le type de sibling.keys
juste être List<Integer>
au lieu de ArrayList<Integer>
, pour que vous n'ayez pas besoin de faire la copie:
sibling.keys = keys.subList(mid, this.num);
Il est important que vous compreniez la différence - allez-vous muter sibling.keys
(par exemple en y ajoutant des valeurs ou en modifiant des éléments existants)? Allez-vous muter keys
? Voulez-vous que la mutation d'une liste affecte l'autre?
Vous obtenez l'exception de transtypage de classe car vous attendez une ArraList tandis que ArrayList.subList () ne renvoie pas ArrayList. Modifiez vos sibling.keys de ArrayList à List, et devrait fonctionner correctement. Cela évitera ClassCastException ainsi que vous n'en aurez pas besoin et aucun cast.