Wie Lambda-Ausdrücke für Schnittstellen mit mehreren Methoden?
Gibt es eine Möglichkeit, Lambda-Ausdrücke, wenn der Ziel-Klasse mehr als ein interface-Methoden? Oder haben Sie gerade haben, um eine anonyme innere Klasse, die in diesem Fall?
- Du meinst, in einer gleichen Klasse, Sie haben zwei Methoden, die potentiell "die Implementierung der Schnittstelle"? Verwenden Sie dann eine Methode Referenz
- Haben Sie einen Blick here außerdem; was kann man tatsächlich als ein "lambda" ist... Breit.
- Sie können mithilfe von lambda-Ausdrücken als Ersatz für anonyme innere Klasse Implementierungen, verwenden funktionale Schnittstellen. Funktionale Schnittstellen können nur über eine explizit deklarierte abstrakte Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, gibt es nicht. Wenn ich deine Frage verstanden Sie richtig benutzen wollen würde lambdas für Schnittstellen mit mehr als einer abstrakten Methode. In diesem Fall ist die Antwort negativ:
Lesen es: http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Ist es nicht möglich, direkt einen multi-method-Objekt mit einem lambda.
Aber Sie können eine zu arbeiten, um das problem zu lösen in ein Recht ordentlich Weg:
Verwenden Sie eine util-Methode, die eine Reihe von single-method-Objekte als Argumente und liefert eine multi-Methode-Objekt, in dem die einfache Methode, die Objekte verpackt sind.
Beispiel:
Ist der resultierende code ist zumindest ein wenig kürzer und schöner als zu erstellen eine anonyme Klasse. Zumindest dann, wenn die Methode Implementierungen sind kurz, und/oder nur eine der Methoden, die implementiert werden müssen.
Diese Technik wird zum Beispiel in der SWT-toolkit, zum erstellen von listener-Objekten.
Runnable
Sie können verwenden Sie eine der Verbraucher oder Funktion Schnittstellen, zum Beispieljava.util.function.BiConsumer
. Wenn Sie mehr als zwei Argumente, die Sie haben, zu erstellen Sie Ihre eigenen speziellen Zweck-Schnittstelle zu ersetzenRunnable
.