2 votes

Remplacer les types de propriétés dans les classes enfant en java Android

J'essaie d'implémenter mon application avec le modèle MVP (Model-View-Presenter) dans Android mais je suis confronté à un problème. Je veux avoir un présentateur de base abstrait avec une propriété de classe de vue qui est d'un type générique. ViewInterface mais lors de la création d'un vrai présentateur, j'aimerais que cette propriété soit du type RealPresenterView et si possible sans avoir besoin de remplacer la même fonction dans tous les diffuseurs.

Comme je ne me suis probablement pas bien expliqué, voici un peu de code pour illustrer le cas, d'abord le présentateur de base :

abstract public class BasePresenter {
    protected ViewInterface view;

    protected ViewInterface getView() {
        return view;
    }
}

puis le vrai présentateur

public class RealPresenter {
    protected RealPresenterView view;

    // ...
    view.methodOnlyExistingInRealPresenterView();
}

Je voulais pouvoir utiliser la vue dans RealPresenter comme RealPresenterView sans avoir à ajouter beaucoup de code dans la classe. Est-ce possible ?

J'ai lu des articles sur les modèles de classe mais je n'ai pas vu comment les mettre en œuvre dans ce cas sans ajouter des fonctions dans chaque présentateur.

4voto

n00dl3 Points 12707

Vous pouvez utiliser des génériques :

BasePresenter

abstract public class BasePresenter<T extends ViewInterface> {
    protected T view;

    protected T getView() {
        return view;
    }
}

RealPresenter

public class RealPresenter extends BasePresenter<RealPresenterView> {

}

Notez que je n'ai pas codé en java pendant un certain temps, mais je pense que c'est correct.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X