我想声明两个列表:
首先是一个整数列表。我将其声明为:
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");
效果很好。
我无法弄清楚原因。
Look at stackoverflow 上的这篇文章 https://stackoverflow.com/a/9838799/1122645.
15.12.2.7 根据实际参数推断类型参数
超类型约束 T :> X 意味着解是以下之一
X 的超类型。给定 T 上的几个这样的约束,我们可以相交
每个约束隐含的超类型集,因为
类型参数必须是所有参数的成员。然后我们可以选择
交叉点中最具体的类型
之间最严格的交叉类型String
,Double
and Integer
都是接口Comparable
and Serializable
。所以当你写的时候
Arrays.asList(1,2.13,"three");
它推断T
to be implements Comparable<?>, Serializable
.然后就好像你在做
List<Object> objs = new List<T extends Comparable<?>, Serializable>
显然,这是不允许的。
另一方面,当您指定Object
明确使用
Arrays.<Object>asList(1,2.13,"three");
没有做出任何推断
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)