Редактировать: Заметил, что сообщение было помечено как дублирующее; Я прочитал другой, похожий вопрос, но он действительно не рассматривал ту же проблему, что и моя. Я работаю с классом, который гарантированно относится к типу Comparable, но я не могу его отличить.ClassCastException при литье из Object [] to Comparable []
У меня есть следующий класс, который представляет собой реализацию интерфейса Queue. Я уверен, что тип, с которым работает объект HeapPriorityQueue, реализует Comparable, так что доступен метод E.compareTo (E другой).
Я создаю экземпляр HeapPriorityQueue в моем основном методе. Где Пациентка класс, который реализует Сопоставимые
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];
}
}
за исключением:
Исключение в потоке «main» java.lang.ClassCastException: [Ljava.lang.Object; не может быть применено к [Ljava.lang.Comparable;
Есть ли какая-то причина (например, так сказал учитель), что он должен быть массив конкретно? Существуют и другие структуры данных (например, «Список'), которые могут вам лучше подойти ... –
dcsohl
@dcsohl Я ограничен в своих вариантах. Это курс о структурах данных, поэтому я считаю, что мой выбор - это либо отдельные списки, либо массивы для структуры кучи. –
Я бы определенно пошел на какой-то «Список» здесь, даже если вам нужно написать его самостоятельно. Как вы выяснили, вы не можете выполнить «новый E [размер];», и вы не можете отбрасывать из 'Object []' в 'E []' (который вы не хотели бы делать, даже если бы могли, так как ваш новый 'Object []' полон 'Object', а не 'E's!). Лучше всего, скорее всего, 'ArrayList'. Независимо от того, разрешено или нет, это другой вопрос. Хотя мне нужно спросить ... если это ** Heap ** PriorityQueue, разве вы не должны настраивать кучу, а не массив или список? – dcsohl