web-dev-qa-db-fra.com

Implémentation de plusieurs interfaces avec Java - existe-t-il un moyen de déléguer?

J'ai besoin de créer une classe de base qui implémente plusieurs interfaces avec beaucoup de méthodes, exemple ci-dessous.

Existe-t-il un moyen plus simple de déléguer ces appels de méthode sans avoir à créer une horde de méthodes en double?

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo {

    private InterFaceOne if1;
    private InterFaceTwo if2;

    public MultipleInterfaces() {
      if1 = new ImplementingClassOne();
      if2 = new ImplementingClassTwo();
    }

    @Override
    public void classOneMethodOne { if1.methodOne(); }
    @Override
    public void classOneMethodTwo { if1.methodTwo(); }
    /** Etc. */


    @Override
    public void classTwoMethodOne { if2.methodOne(); }
    @Override
    public void classTwoMethodTwo { if2.methodTwo(); }
    /** Etc. */

}
65
Chuck Mosher

Comme dit, il n'y a aucun moyen. Cependant, un peu décent IDE peut générer automatiquement des méthodes de délégation. Par exemple, Eclipse peut faire. Commencez par installer un modèle:

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo {
    private InterFaceOne if1;
    private InterFaceTwo if2;
}

cliquez ensuite avec le bouton droit de la souris, choisissez Source> Générer des méthodes de délégation , cochez les champs if1 et if2 et cliquez surOK.

Voir aussi les écrans suivants:

alt text


alt text


alt text

77
BalusC

Il y a un moyen d'implémenter plusieurs interfaces.

Il suffit d'étendre une interface d'une autre ou de créer une interface qui étend une interface prédéfinie Ex:

public interface PlnRow_CallBack extends OnDateSetListener {
    public void Plan_Removed();
    public BaseDB getDB();
}

nous avons maintenant une interface qui étend une autre interface à utiliser dans la classe, utilisez simplement cette nouvelle interface qui implémente deux interfaces ou plus

public class Calculator extends FragmentActivity implements PlnRow_CallBack {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

    }

    @Override
    public void Plan_Removed() {

    }

    @Override
    public BaseDB getDB() {

    }
}

j'espère que cela t'aides

6
Jack Gajanan

Malheureusement non.

Nous attendons tous avec impatience le support Java pour méthodes d'extension

5
Lukas Eder

Il n'y a pas de belle façon. Vous pourrez peut-être utiliser un proxy avec le gestionnaire ayant les méthodes cible et leur déléguant tout le reste. Bien sûr, vous devrez utiliser une usine car il n'y aura pas de constructeur.

0
sblundy