簡體   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