Исправление этого ClassCastException - PullRequest
0 голосов
/ 27 апреля 2020

Итак, у меня есть метод, который должен возвращать BinaryHeap:

public static BinaryHeap legendToHeap(String legend) {
    String[] legendArray = legend.split(" ");
    HuffmanNode[] huffArray = new HuffmanNode[legendArray.length/2];
    for (int i = 0; i < legendArray.length; i++) {
        int count = 0;
        String letterA = " ";
        double freqA = 0.0;
        if (i % 2 == 0) {
            letterA = legendArray[i];
        } else {
            String str = legendArray[i].replaceAll("[^\\p{ASCII}]", "");
            freqA = Double.parseDouble(str);
        }
        if (!letterA.isEmpty() && freqA != 0.0) {
            HuffmanNode newNode = new HuffmanNode(letterA, freqA);
            huffArray[count] = newNode;
            count++;
        }
    }
    BinaryHeap newBinaryHeap = new BinaryHeap((Comparable[]) huffArray);
    //newBinaryHeap.printHeap();
    return newBinaryHeap;   
}   

Проблема возникает в конструкторе BinaryHeap (...) - это часть кода, полученная из моего назначения для BinaryHeapClass.

public class BinaryHeap<E extends Comparable>
{
 /**
  * Construct the binary heap.
  */
 public BinaryHeap( )
 {
     this( DEFAULT_CAPACITY );
 }
 public int getSize() {
     return currentSize;
 }
 /**
  * Construct the binary heap given an array of items.
   */
   public BinaryHeap( E [ ] items )
   {
     currentSize = items.length;
     array = (E[]) new Comparable[ ( currentSize + 2 ) * 11 / 10 ];

     int i = 1;
     for( E item : items )
         array[ i++ ] = item;
     buildHeap( );
    }

Я получаю исключение ClassCastException, которое я не совсем понимаю. Конструктор говорит, что для publi c BinaryHeap (E [] items) я могу построить BinaryHeap по массиву элементов. Итак, E [] в данном случае является объектом класса HuffmanNodes. Я получил ошибку, что BinaryHeap (HuffmanNode []) не определен (что я не совсем понимаю), поэтому я попытался привести его к Comparables (платформа предложила это), я получил ClassCastException, сказав, что я не могу привести HuffmanNode к Comparables , Я думаю, что у меня довольно плохое представление о полиморфизме, и я пытаюсь понять, как устранить эту ошибку. Любые советы или предложения будут очень полезны!

...