我正在解決一個問題,其中有Foo
的幾個實現,並伴隨着幾個FooBuilder
的實現。儘管Foo
共享了需要設置的幾個常用變量,但它們也具有不同的變量,這些變量需要各自的FooBuilder
來實現某些特定的功能。爲了簡潔,我想有FooBuilder
的制定者使用方法鏈接,如:Java:返回超類方法簽名中的子類
public abstract class FooBuilder {
...
public FooBuilder setA(int A) {
this.A = A;
return this;
}
...
}
和
public class FooImplBuilder extends FooBuilder{
...
public FooImplBuilder setB(int B) {
this.B = B;
return this;
}
public FooImplBuilder setC(int C) {
this.C = C;
return this;
}
...
}
等等,有幾個不同的FooBuilder
實現。這在技術上是做我想要的,但是,這種方法對方法鏈接執行時方法調用的順序很敏感。以下方法有未定義的編譯錯誤:
someFoo.setA(a).setB(b)...
要求開發人員考慮鏈中方法調用的順序。爲了避免這種情況,我想讓FooBuilder
中的setter返回實際的實現子類。但是,我不知道如何做到這一點。什麼是最好的方法?
此外,它要麼強制鑄造無處不在,要麼阻止你在需要時改變超類的屬性。 –