我遇到了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. */
  }
}

07-24 15:44