65 votes

Mise en œuvre de plusieurs interfaces avec Java - existe-t-il un moyen de déléguer ?

Je dois 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 dupliquées ?

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. */

}

79voto

BalusC Points 498232

Comme dit, il n'y a pas moyen. Cependant, un IDE un peu décent peut générer automatiquement des méthodes de délégation. Par exemple, Eclipse peut le faire. Tout d'abord, créez un modèle :

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

puis cliquez à droite, choisissez Source > Générer des méthodes déléguées et cocher les deux if1 y if2 et cliquez sur OK .

Voir aussi les écrans suivants :

alt text


alt text


alt text

6voto

Jack Gajanan Points 619

Il existe une seule façon de mettre en œuvre une interface multiple.

Il suffit d'étendre une interface à partir 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();
}

maintenant nous avons une interface qui étend une autre interface à utiliser dans notre classe, il suffit d'utiliser cette nouvelle interface qui implémente deux ou plusieurs interfaces.

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 vous aidera

5voto

Lukas Eder Points 48046

Malheureusement : NON.

Nous attendons tous avec impatience la prise en charge par Java de la fonction méthodes d'extension

0voto

sblundy Points 27163

Il n'y a pas de belle manière. Vous pouvez peut-être utiliser un proxy, le gestionnaire ayant les méthodes cibles et déléguant tout le reste. Bien sûr, vous devrez utiliser une fabrique car il n'y aura pas de constructeur.

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