我正在为SCJP/OCPJP学习,并且遇到了一个接近我的奇怪问题。实例化类型的泛型类<?>
示例代码实例化两个通用的集合:
List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();
的“正确”答案的问题是,这个代码将编译,但加入要么集合将产生一个运行时错误。
当我尝试编译这样的代码时,我只是得到错误。 Java教程甚至没有显示这种类型的代码,它通常使用通配符作为upcast的一部分。
Collection<?> c = new ArrayList<String>();
上面即使是合法的代码,这两个泛型集合?第二个由我的逻辑只会禁止接口。第一个看起来完全没用。为什么要使用一种通用的方法来控制?
看不到这会编译和你可以添加到两个集合就好 - 只是只有一个对象。我把它作为练习让读者弄清楚每个班级哪个对象是有效的:) – Voo 2011-12-30 19:26:56
你也不能这样做。我想知道问题/答案是否是错误的,而且显然是这样。 – jeremyjjbrown 2011-12-30 20:18:25
刚刚投票因为什么原因? – jeremyjjbrown 2014-03-01 18:52:26