2011-06-27 77 views
4

可能重复:
Java Generics<?>在Java中代表什么?

在Eclipse中,我给予警告,使用 'rawtypes' 和它的一个补丁是增加<?>。例如:

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

<?>究竟是什么意思?

+0

如果你想更深入的泛型,请参见[有效的第5章](http:// java。 sun.com/docs/books/effective/generics.pdf) – oliholz

+0

恕我直言,它代表混乱;;) –

回答

1

原始类型指的是使用泛型而不指定类型参数。例如,List是原始类型,而列表<字符串>是一个参数化类型

更多信息请参阅本文档:http://www.javapractices.com/topic/TopicAction.do?Id=224

+0

不是真的有用 –

+0

@Jason你在看什么版本的答案? – Neal

+0

啊,好的,旧版本。 –

0

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

例如:

Class<String> parameter = String.class; 
4

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

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

1

该警告意味着List预计项目的类型,但您没有指定一个。由于编译器无法分辨出您是否犯了错误或忘记了某些内容,因此会发出警告。

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

如果你可能不在乎,但这个是旧的遗留代码,你不想解决它,告诉Eclipse与@SuppressWarnings("rawtypes")和/或@SuppressWarnings("unchecked")忽略它,如果你铸造。

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

相关问题