Incompatible types de Liste de Liste et liste de tableaux de ArrayList
La ligne ci-dessous me donne l'erreur :
Incompatible Types.
List<List<Integer>> output = new ArrayList<ArrayList<Integer>>();
Quelle est la raison?
MODIFIER
Je comprends, si je change ma deuxième liste de tableaux à la Liste, il ne me donne pas d'erreur. Je veux savoir la raison de l'erreur. Grâce
ArrayList<ArrayList<Integer>> output = new ArrayList<ArrayList<Integer>>();
est valideOriginalL'auteur Kraken | 2014-07-17
Vous devez vous connecter pour publier un commentaire.
Si vous avez eu une
List<List<Integer>>
, alors vous seriez en mesure d'ajouter unLinkedList<Integer>
. Mais vous ne pouvez pas faire cela pour unArrayList<ArrayList<Integer>>
, de sorte que le dernier ne peut pas être un type deList<List<Integer>>
.OriginalL'auteur Dawood ibn Kareem
De Les génériques, à l'Héritage et sous-types
OriginalL'auteur Ankit Lamba
La rédaction correcte devrait être:
List<List<Integer>> ret = new ArrayList<List<Integer>>();
Car de cette façon, vous pouvez ajouter non seulement
ArrayList
mais aussiLinkedList
àret
OriginalL'auteur Think Recursively
La raison en est que les génériques ne sont pas covariante.
Envisager des cas plus simple:
Maintenant la Liste est titulaire d'un Flotteur, qui est certainement mauvais.
Même pour votre cas.
Vous disposez maintenant d'une liste
ll
qui détientLinkedList
, mais leal
est déclarée comme une Liste deArrayList
s.OriginalL'auteur lpiepiora
Il est clairement indiqué dans Java Doc
Même chose se passe ici, c'est
Bar = List<Integer>
etFoo = ArrayList<Integer>
commeArrayList<ArrayList<Integer>>
n'est pas sous-type deList<List<Integer>>
OriginalL'auteur CoderCroc
Moins de texte, plus de bugs:
ou
OriginalL'auteur Pavel Shkleinik