【发布时间】:2011-12-30 19:20:24
【问题描述】:
我正在为 SCJP/OCPJP 学习,我遇到了一个对我来说很奇怪的示例问题。
示例代码实例化了两个泛型集合:
List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();
该问题的“正确”答案是该代码可以编译,但添加到任一集合都会产生运行时错误。
当我尝试编译这样的代码时,我会遇到错误。 Java 教程甚至没有显示这种类型的代码,而是通常使用通配符作为向上转换的一部分。
Collection<?> c = new ArrayList<String>();
上面的两个通用集合是合法的代码吗?按照我的逻辑,第二个只会禁止接口。第一个看起来完全没用。为什么要使用不尝试控制的泛型?
【问题讨论】:
-
不知道这将如何编译,并且您可以很好地添加到两个集合中 - 只是恰好只有一个对象。我把它留给读者作为练习来确定哪个对象对每个类都有效:)
-
你也做不到。我想知道示例问题/答案是否错误,显然是错误的。
-
刚才因为什么原因投了反对票?
标签: java generics collections scjp ocpjp