类型参数T不在类型变量T(Java Generic)的范围内

时间:2015-04-17 17:42:28

标签: java generics data-structures comparable

我正在实现一个通用的AVL树,但我遇到了一些编译错误。

我的AVL Tee必须处理T型的Node<T>

在示例中,类型是Event class。我想比较节点。

但是每种类型的数据都必须进行不同的比较,为此,我将比较传递给数据本身进行比较。

我试图让Node实现Comparable Interface和Event Class一样。

我的代码结构如下所示:

树形结构:

public class AvlTree<T extends Comparable<T>> {

private Node<T> root;

public AvlTree() {
    root = null;
}
 //other method to insert dellete operation in the tree

    }

节点结构:

public class Node<T extends Comparable<T>> implements Comparable<T> {
        private T data;
        private Node<T> left;
        private Node<T> right;

        public Node() {
        }
         @Override
        public int compareTo(T t) {
          return this.data.compareTo(t);
        }
     }

将放入节点对象的事件类:

public class Event implements Comparable<Event>{
    private Point point;
    public Event() {
    }
    @Override
    public int compareTo(Event t) {
      return 1;
    }
    }

给我编译错误的代码是我宣布AvlTree:

private  AvlTree<Node<Event>> treeOfEvents;

错误:

  

类型参数Node<Event>不在类型变量T
的范围内        其中T是一个类型变量:
        在AvlTree类中声明的T extends Comparable<T>

1 个答案:

答案 0 :(得分:2)

你的Node必须像这里一样实现Comparable:

public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {

因为您的AvlTree期望某些东西为通用类型,它实现了该类型的可比较