Java 8 Funktionales Interface
Ein funktionales Interface (Functional Interface) ist ein Interface, das genau eine abstrakte Methode hat, aber mehrere nicht-abstrakte Methoden haben kann.
Funktionale Interfaces können implizit in Lambda-Ausdrücke umgewandelt werden.
Lambda-Ausdrücke und Methodenreferenzen (die eigentlich auch als Lambda-Ausdrücke betrachtet werden können).
Definieren Sie zum Beispiel ein funktionales Interface wie folgt:
@FunctionalInterface
interface GreetingService
{
void sayMessage(String message);
}
Dann können Sie einen Lambda-Ausdruck verwenden, um eine Implementierung der Schnittstelle darzustellen (Hinweis: Vor Java 8 wurde sie normalerweise mit anonymen Klassen implementiert):
GreetingService greetService1 = message -> System.out.println("Hello " + message);
Funktionale Schnittstellen können Lambda auf benutzerfreundliche Weise für vorhandene Funktionen unterstützen.
Funktionale Schnittstellen, die vor JDK 1.8 existierten:
- java.lang.Runnable
- java.util.concurrent.Callable
- java.security.PrivilegedAction
- java.util.Comparator
- java.io.FileFilter
- java.nio.file.PathMatcher
- java.lang.reflect.InvocationHandler
- java.beans.PropertyChangeListener
- java.awt.event.ActionListener
- javax.swing.event.ChangeListener
In JDK 1.8 neu hinzugefügte funktionale Schnittstellen:
- java.util.function
java.util.function enthält viele Klassen zur Unterstützung der funktionalen Programmierung in Java. Zu den funktionalen Schnittstellen in diesem Paket gehören:
| Nein. | Schnittstelle & Beschreibung |
|---|---|
| 1 | BiConsumer<T,U>
Stellt eine Operation dar, die zwei Eingabeparameter akzeptiert und kein Ergebnis zurückgibt. |
| 2 | BiFunction<T,U,R>
Stellt eine Methode dar, die zwei Eingabeparameter akzeptiert und ein Ergebnis zurückgibt. |
| 3 | BinaryOperator<T>
Stellt eine Operation auf zwei Operanden desselben Typs dar und gibt ein Ergebnis desselben Typs wie die Operanden zurück. |
| 4 | BiPredicate<T,U>
Repräsentiert eine Methode mit booleschem Ergebnis und zwei Parametern. |
| 5 | BooleanSupplier
Repräsentiert einen Anbieter eines booleschen Ergebnisses. |
| 6 | Consumer<T>
Repräsentiert eine Operation, die eine Eingabe akzeptiert und kein Ergebnis zurückgibt. |
| 7 | DoubleBinaryOperator
Repräsentiert eine Operation auf zwei double-wertigen Operanden, die ein double-wertiges Ergebnis zurückgibt. |
| 8 | DoubleConsumer
Eine Operation, die einen double-wertigen Parameter akzeptiert und kein Ergebnis zurückgibt. |
| 9 | DoubleFunction<R>
Repräsentiert eine Methode, die einen double-wertigen Parameter akzeptiert und ein Ergebnis zurückgibt. |
| 10 | DoublePredicate
Stellt eine Methode mit booleschem Rückgabewert und einem Parameter vom Typ double dar. |
| 11 | DoubleSupplier
Stellt einen Anbieter eines double-Ergebnisses dar. |
| 12 | DoubleToIntFunction
Akzeptiert eine Eingabe vom Typ double und gibt ein Ergebnis vom Typ int zurück. |
| 13 | DoubleToLongFunction
Akzeptiert eine Eingabe vom Typ double und gibt ein Ergebnis vom Typ long zurück. |
| 14 | DoubleUnaryOperator
Akzeptiert einen Parameter vom Typ double, und der Rückgabewerttyp ist ebenfalls double. |
| 15 | Function<T,R>
Akzeptiert einen Eingabeparameter und gibt ein Ergebnis zurück. |
| 16 | IntBinaryOperator
Akzeptiert zwei Parameter, beide vom Typ int, und der Rückgabetyp ist ebenfalls int. |
| 17 | IntConsumer
Akzeptiert einen Eingabeparameter vom Typ int, kein Rückgabewert. |
| 18 | IntFunction<R>
Akzeptiert einen Eingabeparameter vom Typ int und gibt ein Ergebnis zurück. |
| 19 | IntPredicate
Akzeptiert einen Eingabeparameter vom Typ int und gibt ein Ergebnis vom Typ boolean zurück. |
| 20 | IntSupplier
Keine Parameter, gibt ein Ergebnis vom Typ int zurück. |
| 21 | IntToDoubleFunction
Akzeptiert eine Eingabe vom Typ int und gibt ein Ergebnis vom Typ double zurück. |
| 22 | IntToLongFunction
Akzeptiert eine Eingabe vom Typ int und gibt ein Ergebnis vom Typ long zurück. |
| 23 | IntUnaryOperator
Akzeptiert einen Parameter vom Typ int, und der Rückgabewerttyp ist ebenfalls int. |
| 24 | LongBinaryOperator
Akzeptiert zwei Parameter, beide vom Typ long, und der Rückgabewerttyp ist ebenfalls long. |
| 25 | LongConsumer
Akzeptiert einen Eingabeparameter vom Typ long, keinen Rückgabewert. |
| 26 | LongFunction<R>
Akzeptiert einen Eingabeparameter vom Typ long und gibt ein Ergebnis zurück. |
| 27 | LongPredicate
R akzeptiert einen long-Eingabeparameter und gibt ein Ergebnis vom Typ boolean zurück. |
| 28 | LongSupplier
Keine Parameter, gibt einen Wert vom Typ long zurück. |
| 29 | LongToDoubleFunction
Akzeptiert eine Eingabe vom Typ long und gibt ein Ergebnis vom Typ double zurück. |
| 30 | LongToIntFunction
Akzeptiert eine Eingabe vom Typ long und gibt ein Ergebnis vom Typ int zurück. |
| 31 | LongUnaryOperator
Akzeptiert einen Parameter vom Typ long, und der Rückgabewerttyp ist ebenfalls long. |
| 32 | ObjDoubleConsumer<T>
Akzeptiert einen Parameter vom Typ Object und einen Eingabeparameter vom Typ double, kein Rückgabewert. |
| 33 | ObjIntConsumer<T>
Akzeptiert einen Parameter vom Typ Object und einen Eingabeparameter vom Typ int, kein Rückgabewert. |
| 34 | ObjLongConsumer<T>
Akzeptiert einen Eingabeparameter vom Typ Object und einen vom Typ long, kein Rückgabewert. |
| 35 | Predicate<T>
Akzeptiert einen Eingabeparameter und gibt ein boolesches Ergebnis zurück. |
| 36 | Supplier<T>
Keine Parameter, gibt ein Ergebnis zurück. |
| 37 | ToDoubleBiFunction<T,U>
Akzeptiert zwei Eingabeparameter und gibt ein Ergebnis vom Typ double zurück. |
| 38 | ToDoubleFunction<T>
Akzeptiert einen Eingabeparameter und gibt ein Ergebnis vom Typ double zurück. |
| 39 | ToIntBiFunction<T,U>
Akzeptiert zwei Eingabeparameter und gibt ein Ergebnis vom Typ int zurück. |
| 40 | ToIntFunction<T>
Akzeptiert einen Eingabeparameter und gibt ein Ergebnis vom Typ int zurück |
| 41 | ToLongBiFunction<T,U>
Akzeptiert zwei Eingabeparameter und gibt ein Ergebnis vom Typ long zurück |
| 42 | ToLongFunction<T>
Akzeptiert einen Eingabeparameter und gibt ein Ergebnis vom Typ long zurück. |
| 43 | Unary<T>
Akzeptiert einen Parameter vom Typ T, und der Rückgabetyp ist ebenfalls. |
Beispiel für ein funktionales Interface
Das Interface Predicate<T> ist ein funktionales Interface, das einen Eingabeparameter T akzeptiert und ein boolesches Ergebnis zurückgibt
Dieses Interface enthält verschiedene Default-Methoden, um Prädikate zu anderer komplexer Logik zu kombinieren (wie: AND, OR, NOT).
Dieses Interface wird verwendet, um zu testen, ob ein Objekt wahr oder falsch ist.
Wir können die Verwendung des funktionalen Interface Predicate<T> anhand des folgenden Beispiels kennenlernen (Java8Tester.java):
Java8Tester.java-Datei
Führen Sie das obige Skript aus, und das Ausgabeergebnis ist:
$ javac Java8Tester.java $ java Java8Tester 输出所有数据: 1 2 3 4 5 6 7 8 9 输出所有偶数: 2 4 6 8 输出大于 3 的所有数字: 4 5 6 7 8 9
Weitere Erweiterungen
Neue Funktionen in Java 8