2014-11-21 21 views
-1

我試圖實現一個二進制搜索樹,只是爲了學習,我希望樹是通用的。這是代碼我迄今(非常有限):未檢查調用'compareTo(T)'

package lect1; 

public class BinNode { 
    Comparable element; 
    BinNode left; 
    BinNode right; 

    public BinNode find(Comparable obj) { 
     if (element == null) { 
      return null; 
     } else if (obj.compareTo(left.element) < 0) { 
      left.find(obj); 
     } else if(obj.compareTo(right.element) > 0) { 
      right.find(obj); 
     } else { 
      return this; 
     } 
     return null; 
    } 

    public void insert(Comparable obj) { 

    } 
} 

然而,我去「的compareTo(T)」作爲原始類型「java.lang.Comparable的」中的一員的錯誤消息未檢查呼叫。你們中的任何一個人都可以告訴我如何解決這個問題。

+2

http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it – 2014-11-21 16:34:40

回答

1

Comparable<T>是一種通用類型,但您使用原始類型,失去了類型安全性。你可能想使你的BinNode通用也一樣,它的元素類型:

public class BinNode<T extends Comparable<T>> { 
    private T element; 
    private BinNode<T> left; 
    private BinNode<T> right; 

    public BinNode<T> find(T obj) { 
     // TODO: Handle the cases where left or right is null 
     if (element == null) { 
      return null; 
     } else if (obj.compareTo(left.element) < 0) { 
      return left.find(obj); 
     } else if (obj.compareTo(right.element) > 0) { 
      return right.find(obj); 
     } else { 
      return this; 
     } 
    } 

    public void insert(T obj) { 

    } 
} 

T的約束,則確保元素將是相互媲美。

請注意,我也修復了您的遞歸 - 以前您打電話給left.find()right.find()但忽略了返回值。