Estoy intentando producir algunas clases para controlar una aplicación modelo-vista-presentador. He llegado a las siguientes definiciones, pero estoy luchando para evitar los genéricos recursivos.Posiblemente recursivos genéricos Java entre dos clases
public abstract class Presenter<V extends View<...?>> {
protected V view;
public Presenter(V view) {
this.view = view;
}
// ...
}
public abstract class View<P extends Presenter<...?>> {
protected P presenter;
// ...
}
Quería imponer una relación mutua entre las dos clases. La idea es que podría instanciar un presentador para una vista particular, con ambas clases confiando en métodos útiles definidos en las clases base abstractas, pero ambos sabiendo exactamente qué subclase de la clase abstracta de contraparte está en uso.
Mi problema es la definición de la parte ..?
del código. No puedo ver una manera de evitar una situación recurrente, tales como:
public abstract class View<P extends Presenter<V>, V extends View<Q>, Q extends...>
e incluso esa definición no es constante, ya que la clase View ahora toma dos parámetros genéricos ... confusión masiva.
básicamente quería evitar las clases están llenas de referencias al tipo de clase abstracta, lo que exige una gran cantidad de fundición a través de las implementaciones concretas, como a continuación:
// simpler option
public abstract class Presenter {
protected View view;
public Presenter(View view) {
this.view = view;
}
}
public class FooPresenter extends Presenter {
public FooPresenter(BarView view) {
super(view);
}
public someMethod() {
((BarView) getView()).viewSpecificMethod();
}
}
Cada aplicación concreta de estas clases se necesitaría constantemente emitir desde el tipo abstracto al tipo que "sabe" está en uso.
Excelente, eso se hace el truco! Gracias. –