Я работаю над проблемой, когда есть несколько реализаций 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
каким-то образом возвращали фактический реализующий подкласс. Однако я не уверен, как это сделать. Каков наилучший подход?