«main» java.lang.ClassCastException: [Ljava.lang.Comparable; не может быть преобразован в [LNode;

#java #generic-programming

#java #универсальное программирование

Вопрос:

Я пытаюсь создать универсальный класс, подобный приведенному ниже

 public class MyMinHeap<T extends Comparable<T>>
{
    // To store array of elements in heap
    public T[] heapArray;

    // max size of the heap
    public int capacity;

    // Constructor
    @SuppressWarnings("unchecked")
    public MyMinHeap(int n)
    {
        capacity = n;
        heapArray = (T[]) new Comparable[capacity];
        current_heap_size = 0;
    }
 
         MyMinHeap<Node> minHeap = new MyMinHeap<Node>(amount);
 

После заполнения MinHeap.heapArray При попытке получить доступ minHeap.heapArray[0] к получению ошибки Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Comparable; cannot be cast to [LNode; at HalloJavaApp.main(HalloJavaApp.java:111)

Ответ №1:

Это потому, что массив типа Comparable[] не может быть преобразован в массив типа T[] , если T это правильный подтип Comparable . Это @SuppressWarnings("unchecked") подавляет это предупреждение.

Вы могли бы объявить массив типа Comparable<T> и привести, где это необходимо.