什么<! - ? - >代表Java?

时间:2011-06-27 14:35:56

标签: java raw-types

  

可能重复:
  Java Generics

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

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

<?>实际意味着什么?

6 个答案:

答案 0 :(得分:5)

Class<?>应该被解释为Class的东西,但是某些东西是未知或不关心的。

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

答案 1 :(得分:2)

  

原始类型是指在不指定类型参数的情况下使用泛型类型。例如,List是原始类型,而List&lt; String&gt;是参数化类型

有关详细信息,请参阅此文档:http://www.javapractices.com/topic/TopicAction.do?Id=224

答案 2 :(得分:1)

这超出了本网站的范围,但这里有一些链接:

答案 3 :(得分:1)

警告表示List期望项目的类型,但您没有指定项目类型。由于编译器无法判断您是否犯了错误或忘记了某些内容,因此会发出警告。

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

如果您可能关心,但这是旧的遗留代码并且您不想修复它,请告诉Eclipse如果您正在投射,请使用@SuppressWarnings("rawtypes")和/或@SuppressWarnings("unchecked")忽略它。< / p>

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

答案 4 :(得分:0)

Class是Java 5(几年前)以来的泛型类型。

阅读the Java tutorial about generics

答案 5 :(得分:0)

编译器抱怨因为代表通用通配符,因为括号中指定的类型可以是任何引用类型。 Java更喜欢强类型,并向您发出警告,说服您指定具体类型作为类型说明符。

例如:

Class<String> parameter = String.class;