作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
过去 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。
就像香蕉是水果一样,因为它扩展了它,但水果并不总是香蕉。如果您有一个 Fruit 并将其转换到 Banana,则只有当水果实际上是香蕉时,它才会起作用。如果它是一个苹果,它就会失败。
关于java - 泛型和向下转型 (java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10465529/
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型。 向上转型 我们在现实中常常这样说:这个人会唱歌。在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们
当使用使用 C 风格继承的 C API 时,(利用 C 结构的标准布局),例如 GLib ,我们通常使用 C 风格的转换来向下转换: struct base_object { int x;
我是一名优秀的程序员,十分优秀!