2012-02-13 23 views
1

好的,所以我一直試圖實現一個簡單的二叉搜索樹,默認情況下使用可比數據類型。Java - 使用可比較的靜態類型

忽略類中的我的所有其他方法,這是一般的設置我有我認爲這是非常標準:

public class BSTNode<E extends Comparable<? super E>>{ 
    E data; 
    BSTNode<E> left; 
    BSTNode<E> right; 
    //and I'm trying to define a static method(inside of the class) like this: 
    public static <E> String displayAscending(BSTNode<E> node){} 
} 

但是,編譯器不喜歡它。現在,我對泛型很陌生,所以我會解釋我對這個功能的理解,這可能會幫助你弄清楚我的想法有什麼問題。

E extends Comparable 所以基本上是一個對象E是Comparable的擴展。可比較的元素是E的祖先,它本質上是一個抽象的E說法,可以使用Comparable接口與其他元素進行比較。

然後在我的靜態方法中,我試圖遞歸地傳遞BSTNode。我似乎無法圍繞爲什麼它不起作用。我知道如果我通過BSTNode<?>它工作正常,但這似乎很危險。如果有人可以向我解釋爲什麼這不起作用,我可以嘗試找到另一種解決方案。

回答

6

試試這個

public static <E extends Comparable<? super E>> String displayAscending(BSTNode<E> node) 
+0

它,如果你的作品。同BSTNode ,但我想知道爲什麼引用E我的方式給我的問題。我想確保傳遞的對象是可比較的。 – 2012-02-13 03:46:55

+0

此外,我得到這個工作:'公共靜態>字符串顯示增加(BSTNode 節點)' 我仍然想知道爲什麼我的上述代碼給我的問題。 – 2012-02-13 03:55:20

+0

它給出了問題,因爲'E'沒有在'displayAscending'中給出任何類型邊界,但是它需要滿足'B extends N'''中要使用的'E extends Comparable '。你使用什麼字母('E' /'T'/whatever)是不相關的,所以當你改用'T'時它仍然有效。 – mange 2012-02-13 04:14:03