我正在为 SCJP/OCPJP 学习,我遇到了一个对我来说很奇怪的示例问题。
示例代码实例化了两个通用集合:
List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();
该问题的“正确”答案是该代码可以编译,但添加到任一集合都会产生运行时错误。
当我尝试编译这样的代码时,我只会得到错误。Java 教程甚至没有显示这种类型的代码,而是通常使用通配符作为向上转换的一部分。
Collection<?> c = new ArrayList<String>();
上面的两个通用集合是合法代码吗?按照我的逻辑,第二个只会禁止接口。第一个看起来完全没用。为什么要使用不尝试控制的泛型?