2010-12-28 7 views
63

Potrzebuję utworzyć klasę bazową, która implementuje kilka interfejsów z wieloma metodami, na przykład poniżej.Implementacja wielu interfejsów z Javą - czy istnieje sposób na delegowanie?

Czy jest ł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. */ 

} 

Odpowiedz

74

Jak powiedziałem, nie ma mowy. Jednak trochę przyzwoity IDE może autogenerować metody delegatów. Na przykład Eclipse może zrobić. Pierwsza konfiguracja szablonu:

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

następnie kliknij prawym przyciskiem myszy, wybierz Source> Generowanie Delegowanie Metody i zaznacz oba if1 i if2 pola i kliknij OK.

Patrz także następujące ekrany:

alt text


alt text


alt text

+8

Dzięki BalusC i Lukas dla takich szybkie i przydatne odpowiedzi. Mój projekt opiera się na Eclipse, więc mogłem użyć odpowiedzi BalusC w czasie prawie rzeczywistym! Pracowałam jak czar i uratowałam kilka godzin frustrującej pracy. Jako nowy użytkownik tego forum jestem zaskoczony i zachwycony jakością uczestników tutaj. –

+1

Nie ma za co. – BalusC

+6

Świetna wskazówka! Nie wiedziałem o tym i zaoszczędzę 100 godzin w przyszłości :) Dobra rzecz o stackoverflow: nauczysz się również z pytań, których nie zadałeś sobie! –

0

Nie ma dość droga. Możliwe, że będziesz mógł używać proxy z programem obsługi, który ma metody docelowe i przekazuje im wszystko inne. Oczywiście będziesz musiał użyć fabryki, ponieważ nie będzie żadnego konstruktora.

3

Jest tylko jedna droga do realizacji wielu interfejs.

Wystarczy przedłużyć jeden interfejs od drugiego lub utworzyć interfejs, który rozciąga się predefiniowane interfejsu Ex:

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

teraz mamy interfejs, który rozciąga się inny interfejs do wykorzystania w działalności klasyfikacyjnej prostu użyć 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() { 

    } 
} 

nadzieję, że pomoże