我有一个类:
class BSTNode<K extends Comparable, V> {
K key;
BSTNode(K key, V value) { ... }
}
然后我正在使用
node.key.compareTo(root.key) >= 0
node
和root
为BSTNode
的位置。在那一行,我得到一个未经检查的错误。为什么?
warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type Comparable
} else if (node.key.compareTo(root.key) >= 0) { // new node >= root
^
where T is a type-variable:
T extends Object declared in interface Comparable
1 warning
根据我的理解,BSTNode
中定义的K
应该扩展/实施Comparable
。那么node.key.compareTo(root.key)
应该没问题?
答案 0 :(得分:4)
Comparable
也是一般化的。请尝试以下方法:
class BSTNode<K extends Comparable<? super K>, V> { ... }
另外,请确保在声明中使用正确的类型:
// will cause the warning
BSTNode root = new BSTNode<Integer, Integer>(1, 1);
// will NOT cause the warning
BSTNode<Integer, Integer> root = new BSTNode<Integer, Integer>(1, 1);
答案 1 :(得分:2)
该类应实现Comparable的通用版本。在您的情况下Comparable<K>
:
class BSTNode<K extends Comparable<K>, V> {
K key;
BSTNode(K key, V value) {}
}