Dip*_*pta 15 java generics collections jvm compiler-errors
我想要两个列表:第一个是整数列表.我认为它是:
List<Integer> ints= Arrays.asList(1,2,3);
Run Code Online (Sandbox Code Playgroud)
它工作正常.
第二个是对象列表.我声明为:
List<Object> objs= Arrays.asList(1,2.13,"three");
Run Code Online (Sandbox Code Playgroud)
但是一旦我写它就会在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
Run Code Online (Sandbox Code Playgroud)
相反,如果我写
List<Object> objs = Arrays.<Object>asList(1,2.13,"three");
Run Code Online (Sandbox Code Playgroud)
它工作正常.
我无法弄清楚原因.
UmN*_*obe 14
请看stackoverflow上的这篇文章.
15.12.2.7根据实际参数推断类型参数
超类型约束T:> X意味着解决方案是X的超类型之一.在T上给出了几个这样的约束,我们可以交叉每个约束隐含的超类型集合,因为类型参数必须是所有约束的成员.他们.然后我们可以选择交叉点中最具体的类型
最具限制性的类型交集String,Double并且Integer是接口Comparable和Serializable.所以当你写作
Arrays.asList(1,2.13,"three");
Run Code Online (Sandbox Code Playgroud)
它推断T是implements Comparable<?>, Serializable.然后就好像你在做
List<Object> objs = new List<T extends Comparable<?>, Serializable>
Run Code Online (Sandbox Code Playgroud)
显然,这是不允许的.
另一方面,当您Object明确指定使用时
Arrays.<Object>asList(1,2.13,"three");
Run Code Online (Sandbox Code Playgroud)
没有推论
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |