我想创建一个简单的二进制搜索树,它使用泛型来指定数据类型。 但是,当我想创建一个新的整数树时,我收到以下错误:
类型参数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<>();
答案 0 :(得分:1)
这种情况正在发生,因为您已经定义了自己的界面Comparable<T>
,其中Integer
不是子类型。
删除Comparable
,然后使用java.lang
中的{。}}。
此外,正如Eran所指出的,您不应该将String
值添加到BinarySearchTree<Integer>
。
答案 1 :(得分:0)
您不应创建自己的Comparable
界面。它是JDK的一部分,您可以使用它。