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. */
}
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:
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
Malheureusement non.
Nous attendons tous avec impatience le support Java pour méthodes d'extension
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.