2015-04-17 134 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

對不起,沒有看到評論 –

相關問題