首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java通用通配符"?“

java通用通配符"?“
EN

Stack Overflow用户
提问于 2014-07-14 23:51:15
回答 4查看 874关注 0票数 4

我参考了有关Java泛型的文档,并尝试使用通配符"?“在一个简单的程序中:

代码语言:javascript
复制
class Unknown <?> {

}

public class UnknownTypes {

    public static void main(String s[] ) {

    }
}

通配符"?“引用未知类型,因此在类Unknown中,我使用了类型参数通配符本身;然而,当我编译时,我得到编译错误。如果我像这样使用它,它就会起作用。

代码语言:javascript
复制
class Unknown <T> {

}

如果通配符"?“引用未知类型,为什么不能使用"?“作为类型参数。

下面是我得到的编译错误。

代码语言:javascript
复制
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
}

通配符是"?“与其他事物连用?

EN

回答 4

Stack Overflow用户

发布于 2014-07-14 23:54:49

您不能将泛型参数命名为?,因为?不是有效的标识符-变量的有效名称。你必须给一个泛型参数一个有效的java名称,这样你才能在实现中引用它。

您只能将?指定为泛型绑定:

代码语言:javascript
复制
List<?> list; // a variable holding a reference to a list of unknown type

创建实例时不能使用?

代码语言:javascript
复制
new ArrayList<?>(); // can't do this

或者作为类的参数名:

代码语言:javascript
复制
class MyClass<?> { // can't do this
票数 3
EN

Stack Overflow用户

发布于 2014-07-14 23:55:49

要定义具有类型参数的泛型类,不能使用通配符(在泛型类中它是一个类型)

代码语言:javascript
复制
class Unknown <TYPE> {
  TYPE foo; // <-- specifies the type of foo.
}

在使用它时,可以使用通配符

代码语言:javascript
复制
Unknown<?> some = new Unknown<String>(); // <-- some is any kind of Unknown.
票数 3
EN

Stack Overflow用户

发布于 2014-07-14 23:55:41

只有在引用类的实例时才使用通配符。不在类声明中。

代码语言:javascript
复制
class Unknown<T>{}

Unknown<?> instance= new Unknown<Integer>();


public void canHandleAnyUnknown(Unknown<?> wild){
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24740590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档