Je veux décare deux listes: le premier est une liste d’entiers Je décare comme:
List ints= Arrays.asList(1,2,3);
Ça fonctionne bien.
La seconde est une liste d’objects. Je le déclare comme:
List objs= Arrays.asList(1,2.13,"three");
Mais cela donne une erreur dans Eclipse dès que je l’écris. L’erreur est:
Multiple markers at this line - Type mismatch: cannot convert from List<Object&Comparable&Serializable> to List - Type safety: A generic array of Object&Comparable&Serializable is created for a varargs parameter
Au lieu de cela si j’écris
List objs = Arrays.asList(1,2.13,"three");
Ça fonctionne bien.
Je ne suis pas capable de comprendre la raison.
Regardez ce post sur stackoverflow .
15.12.2.7 Inférence des arguments de type en fonction des arguments réels
Une contrainte de supertype T:> X implique que la solution est l’un des supertypes de X. Si plusieurs de ces contraintes sur T, nous pouvons intersecter les ensembles de supertypes impliqués par chacune des contraintes, car le paramètre type doit être membre de l’ensemble leur. On peut alors choisir le type le plus spécifique qui se trouve dans l’intersection
L’intersection de types la plus ressortingctive entre Ssortingng
, Double
et Integer
les interfaces Comparable
et Serializable
. Alors quand tu écris
Arrays.asList(1,2.13,"three");
Il en déduit que T
est implements Comparable>, Serializable
Ensuite, c’est comme si vous
List
De toute évidence, ce n’est pas autorisé.
D’autre part, lorsque vous spécifiez Object
explicitement à l’aide de
Arrays.
aucune inférence n’est faite
Utilisez ceci fonctionne parfaitement
List extends Object> objs = Arrays.asList(10,20.32,"test"); System.out.println(objs);
Sortie: [10, 20.32, test]