【发布时间】:2014-09-04 14:36:57
【问题描述】:
我参考了有关 Java 泛型的文档,并尝试使用通配符“?”在一个简单的程序中:
class Unknown <?> {
}
public class UnknownTypes {
public static void main(String s[] ) {
}
}
通配符“?”指的是一个未知类型,所以在未知类中,我使用了类型参数通配符本身;但是,当我编译时,我得到编译错误。如果我像这样使用它会起作用的。
class Unknown <T> {
}
如果是通配符“?”指未知类型,为什么不能用“?”作为类型参数。
以下是我得到的编译错误。
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
}
是通配符“?”与其他东西一起使用?
【问题讨论】:
-
未知的意思是它永远不会被知道。通配符在类声明中没有意义,因为当您实例化该类时,您将使用类型对其进行参数化。它对
List<?> list = nonGenericGetList();之类的东西更有用(在使用旧库时你会经常这样做)。 -
你想用未知类型解决什么问题?
-
为了说明 David 的陈述,想象一下如果允许您使用该参数,您将如何使用?。例如,
private ? a之类的类成员声明是合法的,这是不允许的,也没有任何意义。