2014-11-21 80 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()但忽略了返回值。