Die funktionale Schnittstelle ist eine Schnittstelle, die nur eine abstrakte Methode hat, aber mehrere nicht abstrakte Methoden aufweisen kann.
Funktionelle Schnittstellen können implizit in Lambda -Ausdrücke umgewandelt werden.
Funktionelle Schnittstellen können Lambdas -freundlich durch vorhandene Funktionen unterstützen.
einführen
Funktionale Schnittstellen sind tatsächlich eine abstrakte Schnittstellenklasse. Die folgenden funktionalen Schnittstellen wurden vor Java 8 gefunden.
java.lang.runnablejava.util.concurrent.callablejava.util.comParator
usw...
Wie man benutzt
Tatsächlich muss die oben erwähnte Schnittstellenklasse nur mit einer funktionalinterface -Annotation geändert werden und wird zu einer funktionalen Schnittstelle in Java. Zum Beispiel die Definition der Callable Interface in JDK
@FunctionalInterfacepublic Interface Callable <V> {v call () löst eine Ausnahme aus;}Es ist so einfach.
Sprechen wir nun über die neue Funktionsinterface, die zu Java 8 hinzugefügt wurde. Hier ist die Definition
// T ist der eingehende Parameter // R ist der Rückgabeparameter @FunctionAnterfacepublic -Schnittstellenfunktion <t, r> {r anwenden (t t); Standard <V> Funktion <v, r> compose (Funktion <? Super V,? Erweitert T> vor {Objects.requirenonnull (vor); return (v v) -> anwenden (vor.Apply (v)); After.Apply (t));Es kann als Funktionszeiger in der C -Sprache (persönliche Meinung) verstanden werden.
Im tatsächlichen Gebrauch wird die Anwendenmethode häufig verwendet. Kompose/und sie werden hauptsächlich in Szenarien verwendet, in denen mehr als zwei Funktionen Schnittstellen und Ausführungssequenz durchgeführt werden.
In einer bestimmten Geschäftsordnung verwende ich sie im Allgemeinen in Kombination mit Bifuncton/Lieferant. Die BIFUTTION unterstützt 2 Parameter, die Funktion unterstützt nur einen Parameter. Der Lieferant kann verwendet werden, um bestimmte erforderliche Werte zu speichern und durch GET zu erhalten.
Beispiel
Verweise auf den Code, an dem Sie normalerweise arbeiten. Dieses Beispiel vermeidet hauptsächlich mehrere Beurteilungsbedingungen, die aufgeblähten Code verursachen. Gleichzeitig kann dieselbe Geschäftslogik von der Funktionsoberfläche abstrahiert werden, sodass der Code an mehreren Stellen wiederverwendet werden kann. Der spezifische Code ist wie folgt.
Funktion <Objekt, Integer> actionTest1 = (Objekt) -> {// Logic Return 0;}; Maps.put (1, actionTest1); Maps.put (2, actionTest2); Maps zurückgeben;}; // Verwenden Sie den öffentlichen void -Test (int type, Object Object) {optional.ofnullable (actionSupplier.get (). Get (type)). ifPresent (x -> x.apply (v, Objekt)); // if/else logic if (type == 1) {// test1 logic} else if (type == 2) {// test2 logic}}Zusammenfassen
Persönlich glaube ich, dass es in Szenarien, in denen mehr Beurteilungen in Geschäftslogikzweigen vorhanden sind, eine bessere Funktionsfunktion und die folgenden Vorteile sind.
Beispiel für funktionale Schnittstelle
Die Prädikat -Schnittstelle ist eine funktionale Schnittstelle, die einen Eingabeparameter t akzeptiert und ein boolescheres Ergebnis zurückgibt.
Diese Schnittstelle enthält eine Vielzahl von Standardmethoden, um das Prädikat in andere komplexe Logiken zu kombinieren (z. B. gegen oder, oder nicht).
Diese Schnittstelle wird verwendet, um das Objekt wahr oder falsch zu testen.
Wir können die Verwendung des Predicate der funktionalen Schnittstelle durch das folgende Beispiel (java8tester.java) verstehen:
Java8tester.java Datei import Java.util.Arrays; Import Java.util.List; Import Java.util.Function.Predicate; public class java8tester {public static void main (String args []) {list <Integer> list = arrays.aslist (1, 2, 3, 4, 5, 6, 7, 8, 9); // Prädikat <Gefeger> predicate = n -> true // n ist eine Testmethode, die Argumente an die Prädikat -Schnittstelle übergibt // n Wenn es vorhanden ist, gibt die Testmethode true system.out.println zurück ("Out alle Daten:"); // den Parameter n eval (list, n-> true) übergeben; // Prädikat <Gefeger> predict1 = n -> n%2 == 0 // n ist eine Testmethode, die den Parameter an die Prädikat -Schnittstelle übergibt // Wenn n%2 die Testmethode ist, gibt das tatsächliche System zurück. eval (list, n-> n%2 == 0); // Prädikat <Gefeger> predict2 = n -> n> 3 // n ist eine Testmethode, die den Parameter an die Prädikat -Schnittstelle übergibt // Wenn n größer als 3 Testmethoden ist, gibt das echte System zurück. eval (list, n-> n> 3); } public static void eval (list <Grainger> list, predicate <Gearner> prognict) {for (Integer n: list) {if (predicate.test (n)) {System.out.println (n + ""); }}}}Führen Sie das obige Skript aus und das Ausgabeergebnis lautet:
$ javac java8tester.java
$ java java8tester
Alle Daten ausgeben:
1
2
3
4
5
6
7
8
9
Alle gleichmäßigen Zahlen ausgeben:
2
4
6
8
Alle Zahlen mehr als 3 ausgeben:
4
5
6
7
8
9
Zusammenfassen
Das obige ist die vom Editor vorgestellte Funktion für Funktionen und funktionale Schnittstelle Java 8 -Funktion und funktionale Schnittstelle. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!