Java: retornando a subclasse na assinatura do método da superclasse

Eu estou trabalhando em um problema onde existem várias implementações deFooacompanhado de váriosFooBuilderé. EnquantoFoocompartilham várias variáveis ​​comuns que precisam ser definidas, elas também têm variáveis ​​distintas que exigemFooBuilder para implementar algumas funcionalidades específicas. Para ser sucinta, eu gostaria de ter oFooBuilder's setters para usar o método de encadeamento, como:

public abstract class FooBuilder {
  ...

  public FooBuilder setA(int A) {
    this.A = A;
    return this;
  }

  ...
}

e

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;
  }
  ...
}

E assim por diante, com vários diferentesFooBuilder implementações. Tecnicamente, isso faz tudo o que eu quero, entretanto, essa abordagem é sensível à ordem das chamadas de métodos quando o encadeamento do método é executado. O seguinte método tem erros de compilação indefinidos:

someFoo.setA(a).setB(b)...

Exigindo que o desenvolvedor pense sobre a ordem das chamadas de método na cadeia. Para evitar isso, eu gostaria de ter os setters emFooBuilder de alguma forma, retorne a subclasse de implementação real. No entanto, não sei como fazer isso. Qual é a melhor abordagem?

questionAnswers(3)

yourAnswerToTheQuestion