Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 24226|Antwort: 1

[Quelle] Detaillierte Erklärung der gängigen funktionalen Schnittstellen (Delegierten) in Java

[Link kopieren]
Veröffentlicht am 16.09.2021 09:28:21 | | | |
Die JDK 1.8 API enthält viele integrierte funktionale Schnittstellen, wie die Comparator- oder Runnable-Schnittstellen, die im alten Java häufig verwendet wurden und @FunctionalInterface Annotationen hinzufügen, damit sie auf Lambdas verwendet werden können. Jetzt sollten wir es wirklich vom Einstieg der üblichen Funktionen in Funktion aus verstehen.

NameArtBeschreibung
VerbraucherVerbraucher< T >Erhält T-Objekte, gibt keine Werte zurück
PrädikatPrädikat< T >Empfängt das T-Objekt und gibt das Boolean zurück
FunktionFunktion< T, R >Empfängt T-Objekt und gibt R-Objekt zurück
LieferantLieferant< T >Stellt T-Objekte (z. B. Pflanzen) bereit, ohne Werte zu akzeptieren
UnaryOperatorUnaryOperatorErhält T-Objekt und gibt T-Objekt zurück
BinaryOperatorBinaryOperatorEmpfangen Sie zwei T-Objekte und geben Sie T-Objekte zurück


Eine als FunctionalInterface bezeichnete Schnittstelle wird als funktionale Schnittstelle bezeichnet, die nur eine benutzerdefinierte Methode haben kann, aber Methoden enthalten kann, die von der Objektklasse übernommen wurden. Wenn eine Schnittstelle nur eine Methode hat, wird der Compiler denken, dass sie eine funktionale Schnittstelle ist. Unabhängig davon, ob es sich um eine funktionale Schnittstelle handelt oder nicht, müssen folgende Punkte bemerkt werden:


  • Die Annotation kann nur auf Schnittstellen mit "Es gibt nur eine abstrakte Methode" markiert werden.
  • Die statischen und Standard-Methoden in der JDK8-Schnittstelle sind keine abstrakten Methoden.
  • Die Schnittstelle erbt standardmäßig java.lang.Object, sodass sie nicht als abstrakte Methode betrachtet wird, wenn die Oberfläche zeigt, dass die Deklaration die Methode im Objekt überschreibt.
  • Die Annotation ist nicht erforderlich, und wenn eine Schnittstelle die Definition einer "funktionalen Schnittstelle" erfüllt, hat sie keinen Einfluss, ob die Annotation hinzugefügt wird oder nicht. Außerdem ermöglicht die Annotation dem Compiler, besser zu prüfen. Wenn du eine nicht funktionierende Schnittstelle schreibst, aber @FunctionInterface hinzufügst, meldet der Compiler einen Fehler.
  • Die Definition zweier benutzerdefinierter Methoden in einer Schnittstelle führt zu einer ungültigen '@FunctionalInterface'-Annotation; FunctionalInterfaceTest ist kein funktionaler Schnittstellenfehler.


java.util.function Es enthält eine Reihe von Klassen zur Unterstützung der funktionalen Programmierung von Java, und die funktionalen Schnittstellen in diesem Paket sind:

Seriennummer
Schnittstelle & Beschreibung
1BiConsumer<T,U>
Repräsentiert eine Aktion, die zwei Eingabeparameter akzeptiert und keine Ergebnisse liefert.
2BiFunction<T,U,R>
Repräsentiert eine Methode, die zwei Eingabeparameter akzeptiert und ein Ergebnis zurückgibt.
3BinaryOperator<T>
stellt eine Aktion dar, die auf zwei Operatoren desselben Typs wirkt, und liefert das Ergebnis desselben Operatortyps zurück
4BiPrädikat<T,U>
Repräsentiert eine Zwei-Parameter-Boolean-Wert-Methode
5BooleanSupplier
Repräsentiert den Anbieter des Booleschen Wert-Ergebnisses
6Verbraucher<T>
Repräsentiert eine Operation, die einen Eingabeparameter akzeptiert und nichts zurückgibt
7DoubleBinaryOperator
stellt eine Aktion dar, die auf zwei doppelwertige Operatoren wirkt, und gibt das Ergebnis eines doppelten Werts zurück.
8DoubleConsumer
Repräsentiert eine Aktion, die einen doppelten Parameter akzeptiert und kein Ergebnis zurückgibt.
9DoubleFunction<R>
Repräsentiert eine Methode, die einen doppelwertigen Parameter akzeptiert und das Ergebnis zurückgibt.
10Doppelprädikat
Repräsentiert eine boolesche Wert-Methode mit einem Doppelwertparameter
11DoubleSupplier
Repräsentiert den Anbieter einer Doppelwertstruktur
12DoubleToIntFunction
Akzeptiert eine Doppeltyp-Eingabe und liefert ein Int-Typ-Ergebnis.
13DoubleToLongFunction
Akzeptiert eine Doppeltyp-Eingabe und liefert ein Langtyp-Ergebnis zurück
14DoubleUnaryOperator
Akzeptiere einen Parameter desselben Typs doppelt, und der Rückgabe-Werttyp ist ebenfalls doppelt.
15Funktion<T,R>
Akzeptiert einen Eingabeparameter, gibt ein Ergebnis zurück.
16IntBinaryOperator
Akzeptieren Sie beide Parameter des Typs int und geben Sie den Wert-Typ int zurück.
17IntConsumer
Akzeptiert einen Eingabeparameter vom Typ int ohne Rückgabewert.
18IntFunction<R>
Akzeptiert einen Eingabeparameter vom Int-Typ und liefert ein Ergebnis.
19IntPrädikat
: Akzeptiert einen int-Eingabeparameter und liefert ein boolsches Ergebnis.
20IntSupplier
Keine Parameter, liefert ein Ergebnis vom Int Typ.
21IntToDoubleFunction
Akzeptiert eine Eingabe vom Int Typ und gibt ein Doppeltyp-Ergebnis zurück.
22IntToLongFunction
Akzeptiert eine Eingabe vom Int-Typ und liefert ein Langtyp-Ergebnis.
23IntUnaryOperator
Akzeptieren Sie einen Parameter vom Typ int und geben Sie den Werttyp ebenfalls int zurück.
24LongBinaryOperator
Akzeptieren Sie beide Parameter vom Typ lang und den Rückwert-Typ als lang.
25LongConsumer
Akzeptieren Sie einen Eingabeparameter vom Typ long ohne Rückgabewert.
26LongFunction<R>
Akzeptiert einen Long-Typ-Eingabeparameter und liefert ein Ergebnis zurück.
27Langprädikat
R akzeptiert einen langen Eingabeparameter und liefert ein Boolean-Typ-Ergebnis.
28LongSupplier
Kein Parameter, gibt ein Ergebnis vom Typ lang zurück.
29LongToDoubleFunction
Akzeptiert eine Long-Type-Eingabe und gibt ein Doppeltyp-Ergebnis zurück.
30LongToIntFunction
Akzeptiert eine Long-Type-Eingabe und gibt ein Int-Typ-Ergebnis zurück.
31LongUnaryOperator
Akzeptieren Sie einen Parameter desselben Typs wie long und geben Sie den Wert des Typs ebenfalls long zurück.
32ObjDoubleConsumer<T>
Akzeptieren Sie einen Objekttyp und einen doppelten Typ-Eingabeparameter ohne Rückgabewert.
33ObjIntConsumer<T>
Akzeptiere Eingabeparameter des Typs Objekt und Typs int ohne Rückgabewert.
34ObjLongConsumer<T>
Akzeptiert Eingabeparameter des Typs Objekt und des Typs Long, ohne Werte zurückzugeben.
35Prädikat<T>
Akzeptiert einen Eingabeparameter und liefert ein boolesches Ergebnis.
36Lieferant<T>
Keine Parameter, gibt ein Ergebnis zurück.
37ToDoubleBiFunction<T,U>
Akzeptiert zwei Eingabeparameter und liefert ein Doppeltyp-Ergebnis zurück
38ToDoubleFunction<T>
Akzeptiert einen Eingabeparameter und gibt ein Doppeltyp-Ergebnis zurück
39ToIntBiFunction<T,U>
Akzeptieren Sie zwei Eingabeparameter und geben Sie ein Ergebnis vom Typ int zurück.
40ToIntFunction<T>
Akzeptieren Sie einen Eingabeparameter und geben Sie ein Ergebnis vom Int Typ zurück.
41ToLongBiFunction<T,U>
Akzeptieren Sie zwei Eingabeparameter und geben Sie ein Longtyp-Ergebnis zurück.
42ToLongFunction<T>
Akzeptieren Sie einen Eingabeparameter und geben Sie ein Langtyp-Ergebnis zurück.
43UnaryOperator<T>
Akzeptieren Sie einen Parameter vom Typ T und geben Sie den Wert des Typs T zurück.


IchDie funktionale Schnittstelle in Java ist der Delegate in .NET/C#, übergeben Sie die Methode als Parameter, wie folgt:

Einführung in C#-Delegierte (Delegierte, Aktion, Func, Prädikat)
https://www.itsvse.com/thread-4658-1-1.html

Funktion Gemeinsame Methoden & Praktiken

//将Function对象应用到输入的参数上,然后返回计算结果。
R anwenden (T t);

Obwohl Funktion< T, R > T Objekte empfangen, R Objekte zurückgeben und nur ein Empfangs- und Rückgabeobjekt erhalten, können in Kombination mit Tupeln mehrere eingehende und zurückkehrende Werte erreicht werden, siehe Folgendes:

Die Verwendung von Tupeln in Java
https://www.itsvse.com/thread-10055-1-1.html

Beispiel 1: Zwei Werte übergeben und sie summieren

Du kannst einfache Schrift und Lambda-Ausdrücke verwenden, der Code ist wie folgt:





Beispiel 2:

undThen-Methode



Compose-Methode



Vollständiger Code



Rückkehrergebnisse



(Ende)




Vorhergehend:Java FeignClient Interface-Ausnahmelösung für mehrere identische Servicenamen
Nächster:Maven-Projekt \target\classes\META-INF\MANIFEST. MF (System...
Veröffentlicht am 19.09.2021 19:34:22 |
Java hat ebenfalls geschaut, obwohl es nicht genutzt wird
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com