我遇到了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()方法)在构造函数完成后运行,而无需显式调用它?
谢谢!
最佳答案
您可以执行显示的操作。您为什么认为它不起作用?
唯一的限制是将this
传递给超类构造函数(这是一种更为罕见的诱惑)。例如,您不能执行以下操作:
public class SomeSubclass extends SomeSuperclass {
public SomeSubclass() {
super(this); /* ERROR: Can't pass `this` to super-ctor. */
}
}