错误java.lang.Integer不在类型变量T的范围内; BinarySearchTree

时间:2017-05-25 09:35:36

标签: java generics binary-search-tree

我想创建一个简单的二进制搜索树,它使用泛型来指定数据类型。 但是,当我想创建一个新的整数树时,我收到以下错误:

  

类型参数java.lang.Integer不在类型变量T

的范围内

我尝试了其他明显扩展Comparable的数据类型,为什么这不起作用?

这是我的代码:

接口:

public interface Comparable<T>
{
    int compareTo( T t );
}

BinarySearchTree:

public class BinarySearchTree<T extends Comparable<T>>
{
private T content;
private BinarySearchTree<T> leftChild, rightChild;

public BinarySearchTree()
{
    content = null;
    leftChild = null;
    rightChild = null;
}

public T getContent()     
{
    if(!isEmpty())
    {
        return content;
    }
    else
    {
        throw new RuntimeException();
    }
}

public boolean isEmpty()
{
    return content == null;
}

public boolean isLeaf()
{
    return !isEmpty() && leftChild.isEmpty() && rightChild.isEmpty();
}

public void add(T t)
{
    if(isEmpty())
    {
        content = t;
        leftChild = new BinarySearchTree<T>();
        rightChild = new BinarySearchTree<T>();
    }
    else
    {
        if(content.compareTo(t) > 0)
        {
            leftChild.add(t);
        }
        if(content.compareTo(t) < 0)
        {
            rightChild.add(t);
        }
    }
} 

public int size()
{
    if(isEmpty())
    {
        return 0;
    }
    else
    {
        return 1 + leftChild.size() + rightChild.size();
    }
}

public boolean contains(T t)
{
    if(isEmpty())
    {
        return false;
    }
    else
    {
        if(content.compareTo(t) > 0)
            leftChild.contains(t);
        else if(content.compareTo(t) < 0)
            rightChild.contains(t);
        return true;
    }
}

public void show()
{
    if(!isEmpty())
    {
        leftChild.show();
        System.out.println(content);
        rightChild.show();
    }
}

}

主:

public class main
{

public static void main(String[] args)
{
    test();
}

public static void test()
{
    BinarySearchTree<Integer> tree = new BinarySearchTree<>();
    tree.add("5");
    tree.add("10");
    tree.add("3");
    tree.add("1");
    tree.show();
}
}

此行出现错误:BinarySearchTree<Integer> tree = new BinarySearchTree<>();

2 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您已经定义了自己的界面Comparable<T>,其中Integer不是子类型。

删除Comparable,然后使用java.lang中的{。}}。

此外,正如Eran所指出的,您不应该将String值添加到BinarySearchTree<Integer>

答案 1 :(得分:0)

您不应创建自己的Comparable界面。它是JDK的一部分,您可以使用它。