繁体   English   中英

在构造函数中初始化需要“ this”作为参数的对象的任何方式?

[英]Any way in initialize objects in a constructor that need “this” as a parameter?

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

我一直为此使用initialize()方法。 我猜您也许能够生成在对象创建后运行的某种形式的线程,但这是一个糟糕的主意。 至于您在构造器中进行的操作,正如您最初所问的那样,我不知道它是如何工作的。

要使用汽车类比,您正在建造汽车(SomeOtherClass),但是不确定其完成状态。 您希望汽车在道路上行驶(SomeClass),但是要使用该道路,您需要一辆完整的汽车。 因此,按照您说的去做,就像在为引擎加油,并期望一切都能解决。 就OOP而言,这没有任何意义。

TL; DR:按照您的建议使用init()方法,并称之为一天。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM