我使用以下代码创建了一个泛型类
public class MyBean<E> {
}要创建该类的对象,我可以使用:
MyBean<String> m1 = new MyBean<String>();// valid --------------------statement 1
MyBean<?> m1 = new MyBean<String>(); // valid --------------------statement 2但是,当我试图使用以下方法创建一个对象时,会出现一个错误:
MyBean<?> m1 = new MyBean<?>();// invalid but why? --------------------statement 3为什么语句2有效,而语句3无效。<?> 的含义是什么?
发布于 2012-01-05 08:41:26
MyBean<?>的意思是“由特定类型参数化的MyBean,但我不知道是哪种类型。因为”我不知道哪种类型“,所以在类型声明中它是有意义的,但在实例化中没有意义。您不能创建”东西,但我不知道是什么“。
发布于 2012-01-05 08:40:02
基本上,"?“意味着未知。在语句2中,您确实知道/声明(当您输入时)您的集合将包含什么样的元素(即字符串)。但在第三份声明中你什么都不知道所以..。
这个链接肯定会有帮助:
http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html
发布于 2012-01-05 08:40:30
MyBean可以和E一样与任何类型一起使用,但是您必须提供该类型。MyBean向类型参数E提供字符串。MyBean根本不提供类型参数,因此这是一个错误。
MyBean是一个不关心类型是什么的MyBean。MyBean也是一个MyBean,就像字符串也是一个对象一样。因此,将任何MyBean<>分配给MyBean是可行的。
https://stackoverflow.com/questions/8739617
复制相似问题