泛型和未经检查的错误

时间:2012-09-07 07:06:37

标签: java generics

我有一个类:

  class BSTNode<K extends Comparable, V> {
    K key;
    BSTNode(K key, V value) { ... }
  }

然后我正在使用

node.key.compareTo(root.key) >= 0

noderootBSTNode的位置。在那一行,我得到一个未经检查的错误。为什么?

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)应该没问题?

2 个答案:

答案 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) {}
}