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