我想要两个列表: 首先是整数列表。我认为它是:
List<Integer> ints= Arrays.asList(1,2,3);
工作正常。
其次是对象列表。我声明为:
List<Object> objs= Arrays.asList(1,2.13,"three");
但是一旦我写它就会在eclipse中出错。错误是:
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");
工作正常。
我无法找出原因。
答案 0 :(得分:14)
15.12.2.7根据实际参数推断类型参数
超类型约束T:&gt; X暗示解决方案是其中之一 X的超类型。鉴于对T的几个这样的约束,我们可以相交 每个约束所暗示的超类型集合,因为 type参数必须是所有这些的成员。然后我们可以选择 交叉点中最具体的类型
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");
没有推论
答案 1 :(得分:2)
使用此作品完美
List<? extends Object> objs = Arrays.asList(10,20.32,"test");
System.out.println(objs);
输出: [10,20.32,测试]