java - 你如何实例化具有相互循环引用的类,而不必在 Java 中使用“NULL”?
问题描述
假设您有以下在 Java 中完全合法的类。
class Ping {
Pong value;
Ping(Pong value) { this.value = value; }
}
class Pong {
Ping value;
Pong(Ping value) { this.value = value; }
}
有没有办法在不给构造函数NULL
赋值的情况下创建 Pong 或 Ping 的实例?
解决方案
你可以使用这样的东西
class Ping {
Pong value;
Ping() {this.value = new Pong(this)}
Ping(Pong value) {this.value = value}
}
class Pong {
Ping value;
Pong() {this.value = new Ping(this)}
Pong(Ping value) {this.value = value}
}
可悲的是,这似乎是这里描述的不好的做法:Java 在构造函数中泄漏 this。所以更好的实现是在创建 Ping 之后分配 Pong。
class Ping {
Pong value;
Ping() {}
Ping(Pong value) {this.value = value}
public setPong(Pong pong) {
this.value = pong;
}
}
class Pong {
Ping value;
Pong() {}
Pong(Ping value) {this.value = value}
public setPing(Ping ping) {
this.value = ping;
}
}
Ping ping = new Ping();
Pong pong = new Pong(ping);
ping.setPong(pong);
推荐阅读
- bash - Bash:在for循环中传递键盘输入
- python - matplolib.pyplot 轴获取定义数据的限制
- c++ - 在乌龟模拟中模拟数组的元素
- java - 等待没有 try-catch
- java - 如何在创建时使用 Value 初始化 Kotlin Object 类?
- oracle - oracle FOR LOOP 不在 SYS_REFCURSOR 中迭代
- c# - c# 中的无分支最小/最大方法
- python - 任意数量列表组合的特殊类型
- github - 无法重命名 Github 中的现有分支。EDIT 分支选项不可见
- excel - How to continue processing a VBA macro in case of an error?