所以我有一个类:为什么不能投射?
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;
}
}
而且我创造TreeNode
类型的ArrayList
,并试图将它转换为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...
请注意我的路径方法返回类型TreeNode<E>
的ArrayList
。但是,当我尝试将我在列表中的位置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://开头计算器.com/help/mcve),它可以证明你的问题。这将导致更少的混淆和更好的响应 – MadProgrammer 2014-12-03 05:27:01
发布您的整个异常,包括堆栈跟踪。 – 2014-12-03 05:30:14