Так у меня есть класс:Почему это не будет?
public static class AVLTreeNode <E extends Comparable<E>> extends BST.TreeNode<E> {
protected int height;
public AVLTreeNode(E e) {
super(e);
}
}
Это расширяет другой класс:
public static class TreeNode<E extends Comparable<E>> {
protected E element;
protected TreeNode<E> left;
protected TreeNode<E> right;
public TreeNode(E e) {
element = e;
}
}
И я создаю ArrayList
типа TreeNode
, и пытается бросить его AVLTreeNode
:
public void balancePath(E e) {
ArrayList<TreeNode<E>> path = path(e);
for (int i = path.size() - 1; i >= 0; i--) {
AVLTreeNode<E> a = (AVLTreeNode<E>)(path.get(i));
//continued code not important...
Обратите внимание, что мой метод пути возвращает ArrayList
типа TreeNode<E>
. Но когда я пытаюсь запустить узел, который я получаю в позиции i в списке, AVLTreeNode<E>
(подтип TreeNode
) Я получаю ClassCastException
.
В чем проблема?
Редактировать Вот полный трассировки стека
Exception in thread "main" java.lang.ClassCastException: com.jeffsite.chapter27.BinarySearchTree$TreeNode cannot be cast to com.jeffsite.chapter29.AVLTree$AVLTreeNode
at com.jeffsite.chapter29.AVLTree.balancePath(AVLTree.java:102)
at com.jeffsite.chapter29.AVLTree.insert(AVLTree.java:19)
at com.jeffsite.chapter29.TestAVLTree.main(TestAVLTree.java:10)
Рассмотрим обеспечение [работоспособный пример] (https: // StackOverflow .com/help/mcve), который демонстрирует вашу проблему. Это приведет к меньшему путанице и лучшим ответам – MadProgrammer
Опубликуйте все свое исключение, включая трассировку стека. –