实例化类型<?>的泛型类 - java

我正在为SCJP / OCPJP学习,并且遇到了一个对我来说很奇怪的示例问题。

该示例代码实例化了两个通用集合:

List<?> list = new ArrayList<?>();
List<? extends Object> list2 = new ArrayList<? extends Object>();

该问题的“正确”答案是该代码可以编译,但是添加到任何一个集合中都会产生运行时错误。

当我尝试像这样编译代码时,我只会得到错误。 Java教程甚至没有显示这种类型的代码,而是通常使用通配符作为转换的一部分。

Collection<?> c = new ArrayList<String>();

上面的两个通用集合甚至是合法代码吗?根据我的逻辑,第二个将只禁止接口。第一个看起来完全没用。为什么要使用不尝试控制的泛型?

java大神给出的解决方案

查看出色的Java generics tutorial PDF。更具体地说,有关通配符的部分包含您问题的答案,我引用

Collection<?> c = new ArrayList<String>();
c.add( new Object() );

由于我们不知道c的元素类型代表什么,因此我们无法
向其添加对象。 add()方法采用E类型的参数,
集合的元素类型。当实际类型参数为?时,
它代表某种未知类型。我们传递来添加的任何参数都会
必须是此未知类型的子类型。因为我们不知道
类型,即我们不能传入任何内容。唯一的例外是null
是每种类型的成员。

无法在Maven surefire中运行多个执行? - java

我想运行名称以ResourceTest.java结尾的测试类,因此我在执行后定义了它们。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <co…

如何告诉Checker遗留方法将接受Nullable类型? - java

考虑一下:@Nullable Object obj = null; Optional<Object> optional = Optional.ofNullable(obj); 这会失败,因为检查器框架假定ofNullable无法接受null值(毕竟,其参数未标记为@Nullable)。有没有办法告诉Checker-framework这个方法(或我…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

页面加载而不是提交时发生struts验证 - java

请原谅我;我对Struts有点陌生。我遇到一个问题,即页面加载而不是我实际提交表单时发生了验证。我整天都在论坛上搜寻和搜寻,没有任何运气。我显然做错了一些事情,应该很容易确定,但是我还没有发现问题所在。这是我的struts.xml的片段:<action name="*Test" method="{1}" clas…

Tomcat找不到直接放置在classes文件夹下的类 - java

我有以下JSP:<%@ page import="foo.*" %> <html> <body> The page count is: <%=Counter.getCount()%> </body> </html> 我在包Counter中有一个foo类,该类存储在: …