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

Ответы на вопрос(3)

Ваш ответ на вопрос