我目前正在学习泛型作为我的编程类(class)的一部分,但我无法理解为什么以下代码会引发编译器错误:
List<Object> objs = Arrays.asList(1,"2");
据我所知,如果您没有显式声明方法的类型参数,例如 Arrays.<Integer>asList();
然后使用最合理的选择为您生成。
以下代码:
List<Object> objs = Arrays.<Object>asList(1,"2");
之所以有效,是因为我明确地告诉编译器,“我希望此方法的类型参数为 Object”,但我很好奇为什么这没有自动成功完成?
最佳答案
出现这个问题是因为不同的类型参数被传递给方法 Arrays.asList,所以编译器试图找到你的类型参数的所有父类(super class)型的交集。
您使用 String
和 int
参数创建了一个列表。所以编译器只发现 Serializable 作为通用接口(interface)。
这将被编译:
List<? extends Serializable> list = Arrays.asList(1, "2");
引用阅读: http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ404
关于java - 创建抛出编译器错误的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34588948/