Implementieren mehrerer Schnittstellen mit Java – gibt es eine Möglichkeit zum Delegieren?

Lesezeit: 2 Minuten

Benutzer-Avatar
Chuck Mosher

Ich muss eine Basisklasse erstellen, die mehrere Schnittstellen mit vielen Methoden implementiert, Beispiel unten.

Gibt es eine einfachere Möglichkeit, diese Methodenaufrufe zu delegieren, ohne eine Horde doppelter Methoden erstellen zu müssen?

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

}

Benutzer-Avatar
BalusC

Wie gesagt, es geht nicht. Eine etwas anständige IDE kann jedoch Delegate-Methoden automatisch generieren. Das kann zum Beispiel Eclipse. Richten Sie zunächst eine Vorlage ein:

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

dann Rechtsklick, wählen Quelle > Delegate-Methoden generieren und kreuzen Sie beides an if1 und if2 Felder und klicken Sie auf OK.

Siehe auch die folgenden Bildschirme:

Alt-Text


Alt-Text


Alt-Text

  • Danke an BalusC und Lukas für diese schnellen und nützlichen Antworten. Mein Projekt basiert auf Eclipse, daher konnte ich die Antwort von BalusC nahezu in Echtzeit verwenden! Hat wunderbar funktioniert und mir mehrere Stunden frustrierender Arbeit erspart. Als neuer Benutzer dieses Forums bin ich überrascht und erfreut über die Qualität der Teilnehmer hier.

    – Chuck Mosher

    28. Dezember 2010 um 15:03 Uhr

  • Toller Hinweis! Das wusste ich nicht und werde in Zukunft 100 Stunden sparen 🙂 Das Gute an Stackoverflow: Du lernst auch aus Fragen, die du dir nicht gestellt hast!

    – Lukas Eder

    28. Dezember 2010 um 15:13 Uhr


Es gibt eine Möglichkeit, mehrere Schnittstellen zu implementieren.

Erweitern Sie einfach eine Schnittstelle von einer anderen oder erstellen Sie eine Schnittstelle, die die vordefinierte Schnittstelle erweitert. Beispiel:

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

Jetzt haben wir eine Schnittstelle, die eine andere Schnittstelle zur Verwendung in unserer Klasse erweitert. Verwenden Sie einfach diese neue Schnittstelle, die zwei oder mehr Schnittstellen implementiert

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() {

    }
}

hoffe das hilft

Benutzer-Avatar
Lukas Edder

Unglücklicherweise nicht.

Wir warten alle gespannt auf die Java-Unterstützung für Erweiterungsmethoden

Es gibt keinen schönen Weg. Möglicherweise können Sie einen Proxy verwenden, wobei der Handler über die Zielmethoden verfügt und alles andere an sie delegiert. Natürlich müssen Sie eine Factory verwenden, da es keinen Konstruktor gibt.

1124700cookie-checkImplementieren mehrerer Schnittstellen mit Java – gibt es eine Möglichkeit zum Delegieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy