java - 扩展以自身为成员的类
问题描述
假设我必须使用一个具有实现二叉树的类的库,其签名如下:
class Node {
public void setN0(Node n);
public void setN1(Node n);
public Node getN0();
public Node getN1();
}
所以,我想创建一个扩展它的类,在它上面放置一个图形层,比如
class UINode extends Node {
private int coordinateX;
private int coordinateY;
}
但我不能这样做,因为它不可能将 UInode 传递为 Node 子节点,比如
UINode root = new UINode();
UINode n0 = new UINode();
UINode n1 = new UINode();
root.setN0(n0); //Not possible
root.setN1(n1); //Not possible
是否有设计模式或其他东西来处理这种情况?或者有一个我看不到的简单解决方案?
解决方案
实际上可以将 设置UINode
为子项Node
:
UINode root = new UINode();
UINode n0 = new UINode();
root.setN0(n0); // possible
但是如果你想从root
对象中获取它,你必须强制转换它:
UINode n = (UINode) root.getN0();
除此之外:如果你想自己实现这个 - 假设它不在库中 - 你可以创建一个泛型Node
类:
class Node<T extends Node> {
public void setN0(T n);
public void setN1(T n);
public T getN0();
public T getN1();
}
现在你可以在你的扩展这个类UINode
:
class UINode extends Node<UINode> {
// ...
}
并在没有演员表的情况下使用它:
UINode root = new UINode();
root.setN0(new UINode());
UINode n = root.getN0();
推荐阅读
- python - 创建由两个区域组成的图像,均值相同但方差不同 Python
- json - Excel VBA 创建 json 有效负载
- jenkins - Jenkins 管道在 master 上占用“镜像”执行器
- buffer - 当 I/O 和内存之间的流量很大时,应该使用什么?
- c++ - 在 Swift 中使用 C++
- c# - 了解空条件运算符
- shell - 仅使用 Bash Cmd 脚本替换文件名中的空格
- entity-framework - EF Core 查询多对多关系表
- phpmyadmin - Mysql 8.0.18 和 PhpMyadmin 4.4.x
- flutter - 使用 Flame 定位 SpriteComponent