2016-09-18 1 views
3

Ich las über Standardmethoden in Java 8 und ich blieb in einer Sache stecken - gibt es eine Möglichkeit, Standardmethode von der Schnittstelle aufzurufen, ohne sie zu implementieren, oder dynamischen Proxy verwendend? Durch die Verwendung nur eine einfache Art und Weise, wie in der folgenden Methoden:Wie explizit Standardmethode einfach, ohne Reflexion und dynamischer Proxy aufrufen?

interface DefaultTestInterface{ 
    default void method1(){ 
     //default method 
    } 
} 
class ImplementingClass implements DefaultTestInterface{ 
    public void method1(){ 
     //default method invocation in implementing method 
     DefaultTestInterface.super.method1(); 
    } 
    void method2(){ 
     //default method invocation in implementing class 
     DefaultTestInterface.super.method1(); 
    } 
} 
public class Main { 
    public static void main(String[] args) { 
     //is there any way to simply invoke default method without using proxy and reflection? 
    } 
} 

lese ich ähnliche Fragen, aber die first wurde nur bei der Umsetzung der Verfahren mit Aufruf verbunden, und zwei andere mit dynamic Proxy using reflection und reflection verbunden.

Diese Lösungen sind ziemlich kompliziert und ich frage mich, ob es eine einfachere Möglichkeit gibt, es zu tun. Ich habe diese Artikel auch gelesen, aber ich habe keine Lösung für mein Problem gefunden. Ich wäre dankbar für jede Hilfe.

+4

Sie wollen also eine Instanzmethode ohne Instanz verwenden ??? – fabian

+1

Es gibt einige Verwirrung in Ihrer Frage. Eine * Standardmethode * einer Java 8-Schnittstelle ist bereits eine Implementierung. Wenn Sie kein klassenspezifisches Verhalten haben, das eine andere Implementierung benötigt, implementieren Sie einfach die Schnittstelle, indem Sie die Methode auslassen, die Sie als Standard verwenden möchten. Wenn Sie eine Methode von einer * Schnittstelle * aufrufen möchten, verwenden Sie stattdessen das Schlüsselwort * static *, um sie zu definieren. –

+0

Nein @fabian, ich dachte irgendwie über Lösung mit Instanziierung nach. –

Antwort

6

Wenn die Schnittstelle nur eine Methode oder alle ihre Methoden Standardimplementierungen haben, alles, was Sie tun müssen, ist eine anonyme Implementierung zu schaffen, tut nicht die Methode implementieren, die Sie anrufen möchten:

(new DefaultTestInterface() {}).method1(); 

Demo.

+0

Danke, das ist genau die Lösung, nach der ich gesucht habe. –

+0

@ Michał Szewczyk: Ihre Frage sagt explizit "* ohne es zu implementieren *" und diese Antwort * implementiert sie *. Das macht einfach keinen Sinn. Es läuft darauf hinaus, dass Sie gefragt haben, "Wie implementiere ich eine Schnittstelle?" ... – Holger

+1

@Holger Technisch gesehen haben Sie absolut Recht: Dies ist eine Implementierung der Schnittstelle. Diese degenerierte Implementierung sieht jedoch nicht nach einer Implementierung aus - ich bin mir sicher, dass viele Programmierer, mich selbst eingeschlossen, die Implementierung nicht in einer kursorischen Version sehen würden. – dasblinkenlight

Verwandte Themen