Java: regresando la subclase en la firma del método superclase
Estoy trabajando en un problema donde hay varias implementaciones deFoo
, acompañado de variosFooBuilder
's. MientrasFoo
comparten varias variables comunes que deben configurarse, también tienen variables distintas que requieren sus respectivosFooBuilder
Para implementar alguna funcionalidad específica. Para ser concisos, me gustaría tener laFooBuilder
Los setters para usar el método de encadenamiento, como:
public abstract class FooBuilder {
...
public FooBuilder setA(int A) {
this.A = A;
return this;
}
...
}
y
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;
}
...
}
Y así sucesivamente, con varios diferentes.FooBuilder
implementaciones Esto técnicamente hace todo lo que quiero, sin embargo, este enfoque es sensible al orden de las llamadas de métodos cuando se realiza el encadenamiento de métodos. Lo siguiente tiene errores de compilación de método indefinido:
someFoo.setA(a).setB(b)...
Requerir que el desarrollador piense en el orden de las llamadas de método en la cadena. Para evitar esto, me gustaría tener a los setters enFooBuilder
de alguna manera devolver la subclase de implementación real. Sin embargo, no estoy seguro de cómo hacer esto. ¿Cuál es el mejor enfoque?