创建抛出编译器错误的对象列表

时间:2016-01-04 10:21:45

标签: java arrays list object generics

我目前正在研究泛型作为编程类的一部分,我在理解以下代码抛出编译器错误的原因时遇到了问题:

UIDevice.currentDevice.orientation

据我所知,如果你没有明确声明方法的类型参数,例如List<Object> objs = Arrays.asList(1,"2"); ,那么就会使用最合理的选择为你生成。

以下代码:

Arrays.<Integer>asList();

有效,因为我明确地告诉编译器,“我希望这个方法的类型参数是Object”,但我很好奇为什么这不能自动成功完成?

2 个答案:

答案 0 :(得分:2)

List<Object> objs = Arrays.asList(1, "2")仅适用于Java 8:)

即使List<Object> objs = Arrays.asList("a", "b")也将使用Java 8进行编译。

检查这些参考文献:

答案 1 :(得分:2)

出现此问题是因为将不同的类型参数传递给方法Arrays.asList,因此编译器尝试查找类型参数的所有超类型的交集。

您创建了一个包含Stringint参数的列表。所以编译器只发现Serializable作为通用接口。

这将被编译:

List<? extends Serializable> list = Arrays.asList(1, "2");

参考阅读: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ404