<! - ? - >是什么意思

时间:2012-01-05 08:34:04

标签: java generics

我使用以下代码

创建了一个泛型类
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不有效。 <?>

的含义是什么?

4 个答案:

答案 0 :(得分:4)

MyBean<?>表示“由特定类型参数化的MyBean,但我不知道哪一个。由于”我不知道哪一个“,它在类型声明中有意义,但不是实例化。你不能创造“某些东西,但我不知道是什么”。

答案 1 :(得分:0)

基本上,“?”意味着未知。在语句二中,你知道/声明(当你初始化)你的集合将保持什么样的元素,即一个字符串。但是在第3个声明中,你什么都不知道......

此链接肯定会有所帮助:

http://docs.oracle.com/javase/tutorial/extra/generics/wildcards.html

答案 2 :(得分:0)

MyBean可以作为E使用任何类型。但是,您必须提供该类型。 MyBean将String提供给类型参数E. MyBean根本不提供类型参数,因此这是一个错误。

MyBean是一个MyBean,你不关心它的类型。 MyBean也是一个MyBean,就像String也是一个Object。因此,分配任何MyBean&lt;&gt;到MyBean工作。

答案 3 :(得分:0)

<?>是泛型的通配符。它通常与extendssuper或两者一起使用,这意味着泛型应用于,扩展或是另一个对象的父类的方法/类。第3个语句无效,因为您说要使用未知类型实例化MyBean - 在某些时候您需要绑定泛型。这就像尝试使用和接口实例化接口。

如果您想了解有关泛型的更多信息,我认为这本书是一个很好的参考: Java Generics and Collections