编辑:注意帖子被标记为重复;我通读了另一个类似的问题,但它确实没有像我一样对待同样的问题。我正在使用一个保证属于Comparable类的类,但我无法投射它。
我有以下类,它是接口队列的实现。我确保HeapPriorityQueue对象使用的类型实现Comparable,以便方法E.compareTo(E other)可用。
我在main方法中创建了一个HeapPriorityQueue实例。 Patient是一个实现Comparable的类
HeapPriorityQueue<Patient> queue = new HeapPriorityQueue<>();
在编译时,我得到一个异常ClassCastException,它指向下面代码中的最后一行
public class HeapPriorityQueue<E extends Comparable<E>> implements Queue<E>
{
private final int DEFAULT_CAPACITY = 10;
private int size;
private E[] array;
public HeapPriorityQueue()
{
size = 0;
array = (E[]) new Object[DEFAULT_CAPACITY + 1];
}
}
例外:
线程中的异常&#34; main&#34; java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[Ljava.lang.Comparable;
答案 0 :(得分:1)
我正在使用一个保证属于Comparable类的类,但我无法施放它。
new Object[DEFAULT_CAPACITY + 1];
不保证任何内容,而不是它是一个对象数组。无法将对象数组安全地转换为Comparable数组。
你必须使用类似的东西:
Class<E> clazz;
array = (E[]) Array.newInstance(clazz, size);