有什么方法初始化构造函数中需要“this”作为参数的对象?

时间:2010-11-09 19:11:23

标签: java oop constructor initialization

我在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()方法)的方法而不显式调用它?

谢谢!

2 个答案:

答案 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()方法,并在一天内调用它。

相关问题