我目前正在研究泛型作为编程类的一部分,我在理解以下代码抛出编译器错误的原因时遇到了问题:
UIDevice.currentDevice.orientation
据我所知,如果你没有明确声明方法的类型参数,例如List<Object> objs = Arrays.asList(1,"2");
,那么就会使用最合理的选择为你生成。
以下代码:
Arrays.<Integer>asList();
有效,因为我明确地告诉编译器,“我希望这个方法的类型参数是Object”,但我很好奇为什么这不能自动成功完成?
答案 0 :(得分:2)
List<Object> objs = Arrays.asList(1, "2")
仅适用于Java 8:)
即使List<Object> objs = Arrays.asList("a", "b")
也将使用Java 8进行编译。
检查这些参考文献:
答案 1 :(得分:2)
出现此问题是因为将不同的类型参数传递给方法Arrays.asList,因此编译器尝试查找类型参数的所有超类型的交集。
您创建了一个包含String
和int
参数的列表。所以编译器只发现Serializable作为通用接口。
这将被编译:
List<? extends Serializable> list = Arrays.asList(1, "2");
参考阅读: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ404