如果我有一个通用类,
public class Graph<K, V extends Comparable> {
...
}
我的理解是类型V
的任何对象都具有可比性,因为它扩展了Comparable接口。现在我想在班上使用HashMap<K, V>
。我的地图中的V
类型的对象仍应具有可比性。我声明了一个方法:
public V getMin(HashMap<K, V> map, V zero) {
V min = zero;
for (V value : map.values()) {
if (value.compareTo(min) < 0) {
min = value;
}
}
return min;
}
编译时,我收到警告
warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type
Comparable
if (value.compareTo(min) < 0) {
where T is a type-variable:
T extends Object declared in interface comprable
我将此警告解释为编译器不确定value
是否具有可比性。为什么不?这是什么问题,我该如何解决它?
答案 0 :(得分:7)
Comparable
接口被声明为raw。它应该用作
YourGenericInterfaceHere extends Comparable<YourGenericInterfaceHere>
或
YourGenericClassHere implements Comparable<YourGenericClassHere>
在泛型中,您将使用extends
:
YourGenericElement extends Comparable<YourGenericElement>
简而言之,您应该将您的课程声明为:
public class Graph<K, V extends Comparable<V>> {
//rest of code...
}
答案 1 :(得分:2)
Comparable
是泛型类型,因此在声明类型参数V
扩展Comparator
时,接口应该参数化:
public class Graph<K, V extends Comparable<V>> {