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. */
}
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:
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
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ń
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.
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