Итак, у меня есть метод, который должен возвращать 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 , Я думаю, что у меня довольно плохое представление о полиморфизме, и я пытаюсь понять, как устранить эту ошибку. Любые советы или предложения будут очень полезны!