从Object []转换为Comparable []时出现ClassCastException

时间:2015-05-14 17:28:28

标签: java casting

编辑:注意帖子被标记为重复;我通读了另一个类似的问题,但它确实没有像我一样对待同样的问题。我正在使用一个保证属于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;

1 个答案:

答案 0 :(得分:1)

  

我正在使用一个保证属于Comparable类的类,但我无法施放它。

new Object[DEFAULT_CAPACITY + 1];不保证任何内容,而不是它是一个对象数组。无法将对象数组安全地转换为Comparable数组。

你必须使用类似的东西:

Class<E> clazz;
array = (E[]) Array.newInstance(clazz, size);