#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>
и привести, где это необходимо.