java Generic wildcard “?”
我提到了关于Java Generics的文档,并试图使用通配符"?" 在一个简单的程序中:
1 2 3 4 5 6 7 8 9 10 |
通配符"?" 指的是Unknown类型,因此在类Unknown中,我使用了type-parameter通配符本身; 但是当我编译时,我得到编译错误。 如果我像这样使用它会有效。
1 2 3 | class Unknown < T > { } |
如果是通配符"?" 是指未知类型,为什么我们不能使用"?" 作为类型参数。
以下是我得到的编译错误。
1 2 3 4 5 6 7 8 | UnknownTypes.java:1: error: <identifier> expected class Unknown < ? > { ^ UnknownTypes.java:1: error: '{' expected class Unknown < ? > { ^ UnknownTypes.java:10: error: reached end of file while parsing } |
是通配符"?" 与其他东西一起使用?
要使用类型参数定义泛型类,不能使用通配符(在泛型类中它是一个类型)
1 2 3 | class Unknown <TYPE> { TYPE foo; // <-- specifies the type of foo. } |
使用它时,您可以使用通配符
1 | Unknown< ? > some = new Unknown<String>(); // <-- some is any kind of Unknown. |
您不能将通用参数命名为
您只能将
1 | List< ? > list; // a variable holding a reference to a list of unknown type |
创建实例时不能使用
1 | new ArrayList< ? >(); // can't do this |
或作为类的参数名称:
1 | class MyClass< ? > { // can't do this |
您只在引用类的实例时使用通配符。 不在班级声明中。
1 2 3 4 5 6 7 | class Unknown< T >{} Unknown< ? > instance= new Unknown<Integer>(); public void canHandleAnyUnknown(Unknown< ? > wild){ } |
通配符意味着"任何"未知的东西。 您只能使用Alphabets作为类型参数。