0

我有一个像这样的课程:

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

然后我正在使用

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

在哪里noderoot在哪里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

据我了解,如 中所定义BSTNodeK应该扩展/实现Comparable. 所以node.key.compareTo(root.key)应该没问题吧?

4

2 回答 2

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); 
于 2012-09-07T07:11:27.510 回答
2

该类应实现 Comparable 的通用版本。在你的情况下Comparable<K>

class BSTNode<K extends Comparable<K>, V> {
   K key;
   BSTNode(K key, V value) {}
}
于 2012-09-07T07:13:54.750 回答