由于在Java中引入泛型类型参数(或类型参数),在Eclipse IDE中编写以下行将在类型Class
上显示黄色波浪线:
Class myClass;
鼠标悬停时显示的警告如下,有两个选项(等等):
Class
是原始类型。应该参数化通用类型Class<T>
。
- 将类型参数添加到“
Class
”- 将
@SuppressWarnings
'rawtypes
'添加到“myClass
”
第一个选项产生此代码:
Class<?> myClass;
第二个产生了这个:
@SuppressWarnings("rawtypes")
Class myClass;
上述两个选项同样足以处理警告。
假设我们和Eclipse都不能推断泛型类型参数*;什么是更好的方法,在什么情况下,以及为什么?
*(尽管可以选择尝试这样做)
答案 0 :(得分:2)
每个程序员都应遵守的一般规则:永远不要无缘无故地压制警告。如果您取消警告,您应该知道警告发生的原因以及为什么它不会出现问题。
在这种情况下,抑制rawtype警告的原因是支持在Java中不存在通用性时编写的遗留代码(参见Java语言规范4.8):
原始类型的使用仅允许作为兼容性的让步 遗留代码。在编写后的代码中使用原始类型 将通用性引入Java编程语言是 强烈气馁。 Java的未来版本可能是有可能的 编程语言将禁止使用原始类型。
因此它不适用于您的情况,您不应该禁止此警告。
对于通配符?
,只有在您想为该变量分配各种类型时才应使用此选项。
例如,List<?> mylist
允许您在列表中存储任何类型,而List<? extends Collection>
允许您存储从Collection
继承的任何类型以存储在列表中。一般规则是尽可能具体地说明允许的类型。这样,如果你不小心将一个对象添加到一个不适合它的List中,编译器就会通知你sonner。
因此,最好的方法是考虑如何使用myClass变量,如果可以声明它将保留哪种类型的对象,请将Wildcard替换为该类型。