我参考了有关Java泛型的文档,并尝试使用通配符"?“在一个简单的程序中:
class Unknown <?> {
}
public class UnknownTypes {
public static void main(String s[] ) {
}
}通配符"?“引用未知类型,因此在类Unknown中,我使用了类型参数通配符本身;然而,当我编译时,我得到编译错误。如果我像这样使用它,它就会起作用。
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
}通配符是"?“与其他事物连用?
发布于 2014-07-14 23:54:49
您不能将泛型参数命名为?,因为?不是有效的标识符-变量的有效名称。你必须给一个泛型参数一个有效的java名称,这样你才能在实现中引用它。
您只能将?指定为泛型绑定:
List<?> list; // a variable holding a reference to a list of unknown type创建实例时不能使用?:
new ArrayList<?>(); // can't do this或者作为类的参数名:
class MyClass<?> { // can't do this发布于 2014-07-14 23:55:49
要定义具有类型参数的泛型类,不能使用通配符(在泛型类中它是一个类型)
class Unknown <TYPE> {
TYPE foo; // <-- specifies the type of foo.
}在使用它时,可以使用通配符
Unknown<?> some = new Unknown<String>(); // <-- some is any kind of Unknown.发布于 2014-07-14 23:55:41
只有在引用类的实例时才使用通配符。不在类声明中。
class Unknown<T>{}
Unknown<?> instance= new Unknown<Integer>();
public void canHandleAnyUnknown(Unknown<?> wild){
}https://stackoverflow.com/questions/24740590
复制相似问题