在Java中,<?>代表什么?

5

可能是重复问题:
Java泛型

在Eclipse中,我使用'rawtypes'时会收到警告,其中一个修复方法是添加<?>。例如:

    Class parameter = String.class;
    //Eclipse would suggest a fix by converting to the following:
    Class<?> parameter = String.class;

这个 <?> 到底是什么意思?

如果你想更深入地了解泛型,请参阅Effective Java第5章 - oliholz
在我看来,它代表着困惑。 ;) - Peter Lawrey
6个回答

5
Class<?>应被解释为某个类的Class,但是具体是什么并不知道或关心。
这是Java泛型类型的使用。在Java 5或更高版本中,Class是一个参数化类型,因此编译器需要一个类型参数。在您的代码特定上下文中,Class<String>可以工作,但是在许多情况下,您并不关心实际的类型参数,因此可以使用Class<?>,告诉编译器您知道Class需要一个类型参数,但您不在乎参数是什么。

2

@Jason,你在看哪个版本的答案? - Naftali

1

1
警告意味着 List 期望项目的类型,但你没有指定。由于编译器无法确定你是否犯了错误或忘记了某些内容,因此它会发出警告。

有几种解决方案:如果您真的不关心列表中的内容,请使用 <?>。它表示“可以是任何东西,我不在乎”。

如果您可能关心但这是旧的遗留代码并且你不想修复它,请使用 @SuppressWarnings("rawtypes") 和 / 或 @SuppressWarnings("unchecked")(如果要强制转换)告诉 Eclipse 忽略它。

最好的解决方案是找出正确的类型并使用它。这样,编译器可以帮助您在编译时捕获更多的拼写错误。


0
编译器报错是因为“<T>”表示通配符,也就是方括号中指定的类型可以是任何引用类型。Java 偏向于强类型,所以它会发出警告,以说服您指定一个具体类型作为类型说明符。
例如:
Class<String> parameter = String.class;

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接