Ответ 1
Посмотрите fooobar.com/questions/346752/....
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");
никакой вывод не сделан