Java: retornando a subclasse na assinatura do método da superclasse
Eu estou trabalhando em um problema onde existem várias implementações deFoo
acompanhado de váriosFooBuilder
é. EnquantoFoo
compartilham 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?