假设您有以下类,它们在Java中是完全合法的。
class Ping {
Pong value;
Ping(Pong value) { this.value = value; }
}
class Pong {
Ping value;
Pong(Ping value) { this.value = value; }
}有没有办法在不给构造函数一个NULL值的情况下创建Pong或Ping的实例?
发布于 2020-04-20 19:45:39
你可以用这样的东西
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 leaking this in constructor。因此,更好的实施方式是在乒乓成立后分配乒乓球。
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);https://stackoverflow.com/questions/61330718
复制相似问题