2015-04-17 91 views
0

我正在实现一个通用的AVL树,但我有一些编译错误。类型参数T不在类型变量T的范围内(Java通用)

我AVL T恤具有处理类型T

在这个例子中的Node<T>,类型为事件class.I要比较的节点。

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

我试图让节点实现可比接口和事件类相同的事情。

我的代码结构看起来如下:

树型结构:

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; 

错误:

type argument Node<Event> is not within bounds of type-variable T
where T is a type-variable:
T extends Comparable<T> declared in class AvlTree

+2

'Node > implements Comparable '应该'Node > implements Comparable >'。 –

+1

此外,通过声明'AvlTree >'这意味着树中的节点将保存'节点',您只需要'AvlTree '。 –

+1

我想你实际上想要一个'AvlTree '。在这种情况下,它是需要实现“可比较”而不是“节点”的“事件”。 –

回答

2

您的节点必须实现可比喜欢这里:

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

因为你的AvlTree需要一些类似的通用类型来实现类似的功能

+0

是的,这是Luiggi说的好答案。非常感谢 – user3521250

+0

对不起,没有看到评论 –

相关问题