我在Java中遇到了这个问题,但我想这是一个关于OOP的问题。这应该是一个非常普遍的需求,所以我希望有一个我不知道的解决方案。
当您需要在构造函数中初始化对象的字段时,您会怎么做,但这些对象需要将其作为参数?
所以这就是你做不到的事情:
public class SomeClass {
private SomeOtherClass foo;
public SomeClass (SomeOtherClass foo) {
this.foo = foo;
}
}
public class SomeOtherClass {
private SomeClass bar;
public SomeOtherClass() {
bar = new SomeClass(this);
}
}
我不知道任何解决方案,除了有一个init()方法执行所有对象初始化,并在我初始化主程序中的SomeOtherClass对象后调用它。有没有更好的办法?或者有没有办法在构造函数完成后运行SomeOtherClass(init()方法)的方法而不显式调用它?
谢谢!
答案 0 :(得分:1)
你可以做你所展示的。为什么你认为它不起作用?
唯一的限制是将this
传递给超类构造函数(这是一种非常罕见的诱惑)。例如,你不能这样做:
public class SomeSubclass extends SomeSuperclass {
public SomeSubclass() {
super(this); /* ERROR: Can't pass `this` to super-ctor. */
}
}
答案 1 :(得分:0)
我总是使用initialize()方法。我猜你可能会产生一些在创建对象后运行的线程形式,但这是一个糟糕的主意。至于在构造函数中这样做,就像你最初问的那样,我看不出它会如何工作。
使用汽车类比,你正在建造一辆汽车(SomeOtherClass),但不确定它的完工状态。您希望汽车在道路上行驶(SomeClass),但要使用这条道路,您需要一辆完整的汽车。所以做你所说的就像是将道路引入引擎并期待一切顺利。在OOP术语中它没有意义。
TL; DR:按照建议使用init()方法,并在一天内调用它。