我正在尝试在Java中编写BinarySearchTree的代码。当我尝试通过实例化Integer BST来测试它时,我不断收到运行时错误。下面是相关的代码:铸造对象到相当的运行时错误
public class BinarySearchTree<E extends Comparable<E>> {
private E[] nodes;
@SuppressWarnings("unchecked")
public BinarySearchTree() {
nodes = (E[])new Object[10];
}
}
现在,我此行的主要:
BinarySearchTree<Integer> test = new BinarySearchTree<Integer>();
当我运行代码,我得到这个错误链接到构造函数的第一行:
[Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
我不是很熟悉泛型,但我猜这是因为Object没有定义的compareTo方法?如果这条线不起作用,我还有什么其他的选择,这样我可以有一个数组,可以以某种方式持有泛型Comparable类型?
您在构造函数中也有编译错误。请确保您发布的调试代码帮助编译的代码能够重现您尝试获得帮助的问题! :) – nbrooks
[如何在Java中创建通用数组?]可能的重复(https://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java) – nbrooks
[本答案](https://stackoverflow.com/a/4221845/803925)特别应该是如何处理这种情况的一个很好的例子。你最终会做一些类似于'clazz.cast(Array.newInstance(clazz.getComponentType(),size))'的地方,其中'clazz'的类型为'Class',并且是你的构造函数的一个参数。当你调用它时你会传入'Integer [] .class'。如果你使用的是集合而不是数组,那么这会容易得多。 –
nbrooks