在Java中的泛型类中使用compareTo函数会导致[Ljava.lang.Object;无法强制转换为[Ljava.lang.Comparable]

在Java中的泛型类中使用compareTo函数会导致[Ljava.lang.Object;无法强制转换为[Ljava.lang.Comparable],java,generics,comparable,Java,Generics,Comparable,当我尝试在泛型类中使用compareTo函数时,我遇到了一个异常:[Ljava.lang.Object;无法强制转换为[Ljava.lang.Comparable;] 这是我的代码,我在insert()函数中遇到了这个问题: 公共类二进制树array{ T[]阵列; 整数级,计数; 最终国际通行能力; 公共二进制树阵列(整数大小) { 容量=大小; 数组=(T[])新对象[容量]; 对于(int i=0;i,由于T的擦除是可比的,而不是对象,因此不能创建对象[]并将其强制转换为T[] 改为创建一

当我尝试在泛型类中使用compareTo函数时,我遇到了一个异常:[Ljava.lang.Object;无法强制转换为[Ljava.lang.Comparable;]

这是我的代码,我在insert()函数中遇到了这个问题:

公共类二进制树array{
T[]阵列;
整数级,计数;
最终国际通行能力;
公共二进制树阵列(整数大小)
{
容量=大小;
数组=(T[])新对象[容量];

对于(int i=0;i,由于
T
的擦除是
可比的
,而不是
对象
,因此不能创建
对象[]
并将其强制转换为
T[]

改为创建一个可比较的[]

array=(T[]) new Comparable[capacity];


但是,您实际上不需要将类约束为自然可比较的类型:如果您还传递一个
比较器,则向我们显示完整的stacktrace,并向我们显示导致错误的行,因为stacktrace中的行号对我们没有用。我第一次使用堆栈溢出,我不知道如何突出显示特定的堆栈但是,在insert()的函数中,compareTo()是被使用了两次,我得到了两个例外。编辑问题并向我们显示完整的堆栈跟踪。注意,您不需要为所有数组元素分配null。数组元素会自动设置为默认值,引用类型的默认值为null。@这没有什么神奇之处:只需添加
//这一行即可
在代码中的适当位置。
array=(T[]) new Comparable[capacity];
array[currentIndex].compareTo(x)
comparator.compare(array[currentIndex], x)