可能重复:
Java Generics
在Eclipse中,我收到有关使用'rawtypes'的警告,其中一个修复是添加<?>
。例如:
Class parameter = String.class;
//Eclipse would suggest a fix by converting to the following:
Class<?> parameter = String.class;
这<?>
实际意味着什么?
答案 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(几年前)以来的泛型类型。
答案 5 :(得分:0)
编译器抱怨因为代表通用通配符,因为括号中指定的类型可以是任何引用类型。 Java更喜欢强类型,并向您发出警告,说服您指定具体类型作为类型说明符。
例如:
Class<String> parameter = String.class;