Implementacja wielu interfejsów w Javie - czy jest sposób na delegowanie?

Muszę stworzyć klasę bazową, która implementuje kilka interfejsów z wieloma metodami, przykład poniżej.

Czy istnieje łatwiejszy sposób delegowania tych wywołań metod bez konieczności tworzenia hordy zduplikowanych metod?

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

}
Author: nhahtdh, 2010-12-28

4 answers

Jak już powiedziałem, nie ma mowy. Jednak nieco przyzwoite IDE może autogenować metody delegatów. Na przykład Eclipse może zrobić. Najpierw skonfiguruj szablon:

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

Następnie kliknij prawym przyciskiem myszy, wybierz Source > Generate Delegate Methods i zaznacz oba pola if1 i if2 i kliknij OK .

Zobacz także następujące ekrany:

alt text


alt text


alt text

 77
Author: BalusC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-21 06:01:02

Jest jeden sposób na zaimplementowanie wielu interfejsów.

Wystarczy rozszerzyć jeden interfejs z innego lub utworzyć interfejs, który rozszerza predefiniowany interfejs Ex:

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

Teraz mamy interfejs, który rozszerza inny interfejs do użycia w out class po prostu użyj tego nowego interfejsu, który implementuje dwa lub więcej interfejsów

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

    }
}

Hope this helps

 6
Author: Jack Gajanan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-22 06:44:56

Niestety: nie.

Wszyscy z niecierpliwością czekamy na wsparcie Javy dla metod rozszerzeń

 5
Author: Lukas Eder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:55:10

Nie ma ładnej drogi. Możesz być w stanie użyć serwera proxy z obsługą mającą metody docelowe i delegując do nich Wszystko inne. Oczywiście będziesz musiał użyć fabryki, bo nie będzie konstruktora.

 0
Author: sblundy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-28 14:40:34