Почему разница в объявлении общих списков?

Я хочу разделить два списка. Первый - это список целых чисел. Я расцениваю это как:

  List<Integer> ints= Arrays.asList(1,2,3);

Работает нормально.

Второй список объектов. Я заявляю это как:

  List<Object> objs= Arrays.asList(1,2.13,"three");

Но это дает ошибку в затмении, как только я пишу это. Ошибка:

  Multiple markers at this line
- Type mismatch: cannot convert from List<Object&Comparable<?>&Serializable> to 
 List<Object>
- Type safety: A generic array of Object&Comparable<?>&Serializable is created for
       a varargs parameter

Вместо этого, если я напишу

  List<Object> objs = Arrays.<Object>asList(1,2.13,"three");

Работает нормально.

Я не могу понять причину.

Ответы на вопрос(2)

Используйте это работает отлично

List<? extends Object> objs = Arrays.asList(10,20.32,"test");

System.out.println(objs);

Выход: [10, 20,32, тест]

 Paul Bellora30 мар. 2012 г., 20:18
-1 Как указала ОП,Arrays.<Object>asList(1,2.13,"three") работает отлично. Вопрос был в том, почему компилятор не может сделать выводObject, а не как взломать решение.
 Bohemian♦30 мар. 2012 г., 14:10
Это хорошо, но обратите внимание, что в том, что касается компилятора,List<Object> являетсяне такой же какList<? extends Object>и ОП может понадобитьсяList<Object>
Решение Вопроса

этот пост на stackoverflow.

15.12.2.7. Вывод аргументов типа на основе фактических аргументов

Ограничение супертипа T:> X подразумевает, что решение является одним из супертипов X. Учитывая несколько таких ограничений на T, мы можем пересекать наборы супертипов, подразумеваемых каждым из ограничений, так как параметр типа должен быть членом всех их. Затем мы можем выбрать наиболее конкретный тип, который находится на пересечении

Самый ограниченный тип пересечения междуString,Double а такжеInteger это оба интерфейсаComparable а такжеSerializable, Поэтому, когда вы пишете

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

Это выводитT бытьimplements Comparable<?>, Serializable. Затем, как будто вы делаете

List<Object> objs = new List<T extends Comparable<?>, Serializable>

Очевидно, что это не разрешено.
С другой стороны, когда вы указываетеObject явно используя

Arrays.<Object>asList(1,2.13,"three");

вывод не сделан

 Dipesh Gupta30 мар. 2012 г., 14:29
Понял. Спасибо за очень хорошее объяснение. Это будет золотое правило для применения в случае таких путаницы.

Ваш ответ на вопрос