为什么通用列表声明的区别?
我想要两个列表:第一个是整数列表。 我认为它是:
List ints= Arrays.asList(1,2,3);
它工作正常。
第二个是对象列表。 我声明为:
List objs= Arrays.asList(1,2.13,"three");
但是一旦我写它就会在eclipse中出错。 错误是:
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
相反,如果我写
List objs = Arrays.asList(1,2.13,"three");
它工作正常。
我无法弄清楚原因。
请看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
使用
Arrays.
没有推论
使用这个作品完美
List extends Object> objs = Arrays.asList(10,20.32,"test"); System.out.println(objs);
输出: [10,20.32,测试]