[英]I need to give 2 objects as a parameter in a constructor, but I'm struggling to find the right way to do it
[英]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.