在过去的3小时内一直在努力寻找一个直接的答案/解决方案,但是没有运气,希望你们能为您提供帮助:

我有以下使用二进制搜索树实现间隔树的类:

public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {...}

public class BinarySearchTree<T extends Comparable<T>> {
protected Node<T> root;
...}

public class IntervalNode extends Node<Interval> {...}

public class IntervalTree extends BinarySearchTree<Interval> {...}


当我尝试对IntervalTree实例的根成员执行以下强制转换时,得到ClassCastException:

IntervalNode CurrentNode = (IntervalNode)root; //root being of type Node<Interval>
which IntervalNode extends.


我对Java还是很陌生,但是从我阅读和搜索过的内容来看,这种向下转换应该是可能的,因此对于这种异常的原因我有些迷失。到目前为止,我最好的猜测是这是由类型擦除引起的,但是我无法在此问题上找到直接的答案。关于导致此异常的原因的任何想法还是更好的解决方法?

最佳答案

您在这里不是上投,而是下投。 IntervalNode是Node<Interval>(因为它对其进行了扩展),但是Node<Interval>不一定是IntervalNode。

正如香蕉是一种水果,因为它可以扩展它一样,但水果并不总是香蕉。如果您有水果并将其浇铸到香蕉上,则只有在水果实际上是香蕉的情况下,它才能起作用。如果是苹果,它将失败。

09-25 22:18