私は、いくつかのFoo
を伴うのいくつかFooBuilder
の実装がある問題に取り組んでいます。は、設定する必要があるいくつかの共通変数を共有していますが、特定の機能を実装Foo
するためにそれぞれが必要とする個別の変数もあります。簡潔にするために、次のように、のセッターにメソッドチェーンを使用さFooBuilder
せたいと思います。FooBuilder
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
これを避けるために、セッターが何らかの方法で実際の実装サブクラスを返すようにしたいと思います。しかし、これを行う方法がわかりません。最善のアプローチは何ですか?