Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 24226|Antwoord: 1

[Bron] Gedetailleerde uitleg van veelvoorkomende functionele interfaces (delegates) in Java

[Link kopiëren]
Geplaatst op 16-09-2021 09:28:21 | | | |
De JDK 1.8 API bevat veel ingebouwde functionele interfaces, zoals de Comparator- of Runnable-interfaces die vaak werden gebruikt in het oude Java, die @FunctionalInterface annotaties toevoegen zodat ze op lambdas kunnen worden gebruikt. Laten we het nu echt begrijpen vanaf de ingang van gemeenschappelijke functies in Functie.

naamtypebeschrijving
ConsumentConsument< T >Ontvangt T-objecten, geeft geen waarden terug
PredikaatPredicaat< T >Ontvangt het T-object en geeft de booleaan terug
FunctieFunctie< T, R >Ontvangt T-object en retourneert R-object
LeverancierLeverancier< T >Geef T-objecten (bijv. planten) zonder waarden te accepteren
UnaryOperatorUnaryOperatorOntvangt T-object en retourneert T-object
BinaryOperatorBinaryOperatorOntvang twee T-objecten en geef T-objecten terug


Een interface die wordt aangeduid als een FunctionalInterface wordt een functionele interface genoemd, die slechts één aangepaste methode kan hebben, maar ook methoden kan bevatten die van de objectklasse zijn geërfd. Als een interface slechts één methode heeft, zal de compiler denken dat het een functionele interface is. Of het nu een functionele interface is of niet, de volgende punten moeten worden opgemerkt:


  • De annotatie kan alleen op interfaces worden gemarkeerd met "Er is maar één abstracte methode".
  • De statische en standaardmethoden in de JDK8-interface zijn geen abstracte methoden.
  • De interface erft standaard java.lang.Object, dus als de interface laat zien dat de declaratie de methode in het Object overschrijft, wordt deze niet als een abstracte methode beschouwd.
  • De annotatie is niet vereist, en als een interface voldoet aan de definitie van een "functionele interface", heeft dat geen invloed op de toevoeging van de annotatie of niet. Bovendien stelt de annotatie de compiler in staat om beter te controleren. Als je een niet-functionele interface schrijft, maar @FunctionInterface toevoegt, zal de compiler een foutmelding geven.
  • Het definiëren van twee aangepaste methoden in één interface resulteert in een ongeldige '@FunctionalInterface'-annotatie; FunctionalInterfaceTest is geen functionele interfacefout.


java.util.function Het bevat een aantal klassen ter ondersteuning van Java's functionele programmering, en de functionele interfaces in dit pakket zijn:

serienummer
Interface & Beschrijving
1BiConsumer<T,U>
Vertegenwoordigt een actie die twee invoerparameters accepteert en geen resultaten teruggeeft
2BiFunction<T,U,R>
Stelt een methode voor die twee invoerparameters accepteert en een resultaat teruggeeft
3BinaryOperator<T>
vertegenwoordigt een actie die werkt op twee operatoren van hetzelfde type, en geeft het resultaat van hetzelfde type operator terug
4BiPredicaat<T,U>
Vertegenwoordigt een twee-parameter booleaanse waardemethode
5BooleanSupplier
Vertegenwoordigt de leverancier van het Booleaanse waarderesultaat
6Consument<T>
Stelt een bewerking voor die een invoerparameter accepteert en niets teruggeeft
7DoubleBinaryOperator
vertegenwoordigt een actie die werkt op twee dubbelwaardige operatoren, en geeft het resultaat van een dubbele waarde terug.
8DoubleConsumer
Vertegenwoordigt een actie die een dubbele waarde parameters accepteert en geen resultaat teruggeeft.
9DoubleFunction<R>
Stelt een methode voor die een dubbelwaardige parameter accepteert en het resultaat teruggeeft
10Dubbelpredicaat
Stelt een booleaanse waardemethode voor met een dubbele waardeparameter
11DoubleSupplier
Vertegenwoordigt de aanbieder van een dubbele waardestructuur
12DoubleToIntFunction
Accepteert een dubbele invoer en geeft een int-type resultaat terug.
13DoubleToLongFunction
Accepteert een double-type input en geeft een longtype-resultaat terug
14DoubleUnaryOperator
Accepteer een parameter van hetzelfde type dubbel, en het retourwaardetype is ook dubbel.
15Function<T,R>
Accepteert een invoerparameter, geeft een resultaat terug.
16IntBinaryOperator
Accepteer beide parameters van type int, en geef waardetype int terug.
17IntConsumer
Accepteert een invoerparameter van type int zonder returnwaarde.
18IntFunction<R>
Accepteert een int-type invoerparameter en geeft een resultaat terug.
19IntPredicaat
: Accepteert een int-invoerparameter en geeft een booleaans resultaat terug.
20IntSupplier
Geen parameters, geeft een int-type resultaat terug.
21IntToDoubleFunction
Accepteert een int type input en geeft een resultaat van het dubbele type terug.
22IntToLongFunction
Accepteert een int type input en geeft een long type resultaat terug.
23IntUnaryOperator
Accepteer een parameter van het type int, en geef de waarde terug dat het type ook int is.
24LongBinaryOperator
Accepteer zowel parameters van type long als return value type as long.
25LongConsumer
Accepteer een invoerparameter van type long zonder returnwaarde.
26LongFunction<R>
Accepteert een lange type invoerparameter en geeft een resultaat terug.
27LongPredicaat
R accepteert een lange invoerparameter en geeft een booleaans type resultaat terug.
28LongSupplier
Geen parameter, geeft een resultaat van type long terug.
29LongToDoubleFunction
Accepteert een long type input en geeft een double type resultaat terug.
30LongToIntFunction
Accepteert een long type input en geeft een int type resultaat terug.
31LongUnaryOperator
Accepteer een parameter van hetzelfde type als long, en geef de waarde van type terug die ook long is.
32ObjDoubleConsumer<T>
Accepteer een objecttype en een dubbeltype invoerparameter zonder terugvoerwaarde.
33ObjIntConsumer<T>
Accepteer invoerparameters van type object en type int zonder returnwaarde.
34ObjLongConsumer<T>
Accepteert invoerparameters van type object en type long zonder waarden terug te geven.
35Predikaat<T>
Accepteert een invoerparameter en geeft een Booleaans resultaat terug.
36Leverancier<T>
Geen parameters, geeft een resultaat terug.
37ToDoubleBiFunction<T,U>
Accepteert twee invoerparameters en geeft een dubbeltyperesultaat terug
38TotDoubleFunction<T>
Accepteert een invoerparameter en geeft een dubbeltyperesultaat terug
39ToIntBiFunction<T,U>
Accepteer twee invoerparameters en geef een int-type resultaat terug.
40ToIntFunction<T>
Accepteer een invoerparameter en geef een int-type resultaat terug.
41ToLongBiFunction<T,U>
Accepteer twee invoerparameters en geef een longtype-resultaat terug.
42ToLongFunction<T>
Accepteer een invoerparameter en geef een long type-resultaat terug.
43UnaryOperator<T>
Accepteer een parameter van type T en geef de waarde van type T terug.


IkDe functionele interface in Java is de delegate in .NET/C#, geef de methode als parameter door, als volgt:

Introductie tot C#-delegates (delegate, Actie, Func, predicaat)
https://www.itsvse.com/thread-4658-1-1.html

Functie Gemeenschappelijke Methoden & Praktijken

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

Hoewel Functie< T, R > T-objecten ontvangt, R-objecten terugstuurt, en slechts één ontvang- en retourobjecten, maar gecombineerd met tuples kunnen meerdere inkomende en terugkerende waarden worden behaald, zie naar:

Het gebruik van tupels in Java
https://www.itsvse.com/thread-10055-1-1.html

Voorbeeld 1: Geef twee waarden door en tel ze op

Je kunt plain writing en lambda-expressies gebruiken, de code is als volgt:





Voorbeeld 2:

enDan methode



Compose-methode



Volledige code



Resultaten van de terugkeer



(Einde)




Vorig:Java FeignClient Interface uitzonderingsoplossing voor meerdere identieke servicenamen
Volgend:Maven-project \target\classes\META-INF\MANIFEST. MF (systeem...
Geplaatst op 19-09-2021 19:34:22 |
Java heeft ook gekeken, hoewel het niet wordt gebruikt
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com