2017-01-25 2 views
1

Ich habe diese drei Interfaces als Teil der API Fluent Interface (wo viele Methoden Verkettung geschieht):Wie verwendet man die erweiterte Interface-Methode in Java?

interface VerifierA extends VerifierC { 

     VerifierA method1(); 
     // other methods elided 
    } 

    interface VerifierB extends VerifierC { 
    VerifierB method1(); 
     // other methods elided 
    } 

    interface VerifierC { 
    VerifierA commonMethod(); 
    } 

commonMethod() als VerifierA ich kann dann Kette Methoden commonMethod().method1() aber nicht commonMethod().method2() Durch die Deklaration;

Wie kann ich commonMethod() in VerifierC zurück zu sowohl VerifierA oder VerifierB wie benötigt haben?

+1

Ich denke, das bereits in http://stackoverflow.com/questions/1069528/method-chaining-inheritance-don-t-play-well- gefragt wird, zusammen oder http://stackoverflow.com/questions/9655335/method-chaining-how-to-use-getthis-trick-in-case-of-multi-level-erbinance – pringi

+0

Nachdem ich die referenzierte Antwort gelesen habe, bin ich ängstlich Ich bin nicht in der Lage, es auf meine Situation anzuwenden, die nur aus Schnittstellen besteht ... – Andrejs

+0

Warum lassen Sie nicht einfach commonMethod VerifierC zurückgeben und in VerifierB überschreiben, um VerifierB und VerifierA zurückzugeben, um VerifierA zurückzugeben? – david

Antwort

2

Sie es mit Generika lösen könnte:

interface VerifierA extends VerifierC<VerifierA> { 
    VerifierC<VerifierA> method1(); 
} 

interface VerifierB extends VerifierC<VerifierB> { 
    VerifierC<VerifierB> method1(); 
} 

interface VerifierC<T> {  
    T commonMethod(); 
} 
+0

+1 Ich würde gleich antworten. Sollte der Rückgabetyp von VerifierB # method1 nicht VerifierC sein? –

+0

Sollte in 'VerifierB' die' method1() '' 'dann? – Andrejs

+0

@ luc14n0 definitiv. Vielen Dank! –

Verwandte Themen