Pourquoi la différence dans la déclaration de listes génériques?

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 objs = new List, Serializable> 

De toute évidence, ce n’est pas autorisé.
D’autre part, lorsque vous spécifiez Object explicitement à l’aide de

 Arrays.asList(1,2.13,"three"); 

aucune inférence n’est faite

Utilisez ceci fonctionne parfaitement

 List objs = Arrays.asList(10,20.32,"test"); System.out.println(objs); 

Sortie: [10, 20.32, test]