可能是重复问题:
Java泛型
在Eclipse中,我使用'rawtypes'时会收到警告,其中一个修复方法是添加<?>
。例如:
Class parameter = String.class;
//Eclipse would suggest a fix by converting to the following:
Class<?> parameter = String.class;
这个
<?>
到底是什么意思?可能是重复问题:
Java泛型
在Eclipse中,我使用'rawtypes'时会收到警告,其中一个修复方法是添加<?>
。例如:
Class parameter = String.class;
//Eclipse would suggest a fix by converting to the following:
Class<?> parameter = String.class;
<?>
到底是什么意思?Class<?>
应被解释为某个类的Class
,但是具体是什么并不知道或关心。Class
是一个参数化类型,因此编译器需要一个类型参数。在您的代码特定上下文中,Class<String>
可以工作,但是在许多情况下,您并不关心实际的类型参数,因此可以使用Class<?>
,告诉编译器您知道Class
需要一个类型参数,但您不在乎参数是什么。原始类型是指在不指定类型参数的情况下使用泛型类型。例如,List 是一个原始类型,而 List<String> 是一个参数化类型
请参阅此文档以了解更多信息:http://www.javapractices.com/topic/TopicAction.do?Id=224
List 期望项目的类型,但你没有指定。由于编译器无法确定你是否犯了错误或忘记了某些内容,因此它会发出警告。
有几种解决方案:如果您真的不关心列表中的内容,请使用 <?>
。它表示“可以是任何东西,我不在乎”。
如果您可能关心但这是旧的遗留代码并且你不想修复它,请使用 @SuppressWarnings("rawtypes")
和 / 或 @SuppressWarnings("unchecked")
(如果要强制转换)告诉 Eclipse 忽略它。
最好的解决方案是找出正确的类型并使用它。这样,编译器可以帮助您在编译时捕获更多的拼写错误。
<T>
”表示通配符,也就是方括号中指定的类型可以是任何引用类型。Java 偏向于强类型,所以它会发出警告,以说服您指定一个具体类型作为类型说明符。Class<String> parameter = String.class;