Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 24226|Svar: 1

[Källa] Detaljerad förklaring av vanliga funktionella gränssnitt (delegater) i Java

[Kopiera länk]
Publicerad på 2021-09-16 09:28:21 | | | |
JDK 1.8 API innehåller många inbyggda funktionella gränssnitt, såsom Comparator eller Runnable-gränssnitten som ofta användes i gammal Java, vilka lägger till @FunctionalInterface annotationer så att de kan användas på lambdas. Nu ska vi verkligen förstå det från ingången av vanliga funktioner i Funktionen.

Namntypbeskrivning
KonsumentKonsument< T >Tar emot T-objekt, returnerar inga värden
PredikatPredikat< T >Tar emot T-objektet och returnerar booleanen
FunktionFunktion< T, R >Tar emot T-objekt och returnerar R-objekt
LeverantörLeverantör< T >Tillhandahålla T-objekt (t.ex. växter) utan att acceptera värden
UnaryOperatorUnaryOperatorTar emot T-objekt och returnerar T-objekt
BinärOperatorBinärOperatorTa emot två T-objekt och returnera T-objekt


Ett gränssnitt märkt som FunctionalInterface kallas ett funktionellt gränssnitt, som endast kan ha en anpassad metod, men kan inkludera metoder ärvda från objektklassen. Om ett gränssnitt bara har en metod, kommer kompilatorn att tro att det är ett fungerande gränssnitt. Oavsett om det är ett funktionellt gränssnitt eller inte måste följande punkter noteras:


  • Annotationen kan endast markeras på gränssnitt med "Det finns bara en abstrakt metod".
  • De statiska och standardmetoderna i JDK8-gränssnittet är inte abstrakta metoder.
  • Gränssnittet ärver som standard java.lang.Object, så om gränssnittet visar att deklarationen åsidosätter metoden i objektet betraktas den inte som en abstrakt metod.
  • Annotationen krävs inte, och om ett gränssnitt uppfyller definitionen av ett "funktionellt gränssnitt" har det ingen effekt på om annoteringen läggs till eller inte. Dessutom gör annoteringen att kompilatorn kan kontrollera bättre. Om du skriver ett icke-fungerande gränssnitt men lägger till @FunctionInterface, kommer kompilatorn att rapportera ett fel.
  • Att definiera två anpassade metoder i ett gränssnitt resulterar i en ogiltig '@FunctionalInterface'-annotering; FunctionalInterfaceTest är inte ett funktionellt gränssnittsfel.


java.util.function Den innehåller ett antal klasser för att stödja Javas funktionella programmering, och de funktionella gränssnitten i detta paket är:

serienummer
Gränssnitt & Beskrivning
1BiConsumer<T,U>
Representerar en åtgärd som accepterar två indataparametrar och inte ger några resultat
2BiFunktion<T,U,R>
Representerar en metod som accepterar två indataparametrar och returnerar ett resultat
3BinärOperator<T>
representerar en handling som verkar på två operatorer av samma typ, och returnerar resultatet av samma typ av operator
4BiPredicate<T,U>
Representerar en tvåparametrs boolesk värdemetod
5BooleanSupplier
Representerar leverantören av det boolska värderesultatet
6Konsument<T>
Representerar en operation som accepterar en indataparameter och inte returnerar något
7DoubleBinaryOperator
representerar en handling som verkar på två dubbelvärdiga operatorer och returnerar resultatet av ett dubbelvärde.
8DoubleConsumer
Representerar en handling som accepterar en dubbelvärdeparameter och inte returnerar något resultat.
9DoubleFunction<R>
Representerar en metod som accepterar en dubbelvärd parameter och returnerar resultatet
10Dubbelpredikat
Representerar en boolesk värdemetod med en dubbelvärdeparameter
11DoubleSupplier
Representerar leverantören av en dubbelvärdesstruktur
12DoubleToIntFunction
Accepterar en dubbeltyp-indata och returnerar ett int-typresultat.
13DoubleToLongFunction
Accepterar en dubbeltyp-indata och returnerar ett långtypresultat
14DoubleUnaryOperator
Acceptera en parameter av samma typ dubbelt, och returvärdestypen är också dubbel.
15Funktion<T,R>
Accepterar en indataparameter, returnerar ett resultat.
16IntBinaryOperator
Acceptera båda parametrarna av typen int, och returnera värdetypen int.
17IntConsumer
Accepterar en indataparameter av typen int utan något returvärde.
18IntFunction<R>
Accepterar en int-typ indataparameter och returnerar ett resultat.
19Intpredikat
: Accepterar en int-indataparameter och returnerar ett boolskt resultat.
20IntSupplier
Inga parametrar, returnerar ett resultat av int-typ.
21IntToDoubleFunction
Accepterar en int typ indata och returnerar ett dubbeltypresultat.
22IntToLongFunction
Accepterar en int-typ indata och returnerar ett resultat av lång typ.
23IntUnaryOperator
Acceptera en parameter av typen int, och returnera värdetypen är också int.
24LongBinaryOperator
Acceptera både parametrar av typen long och returnera värdetyp as long.
25LongConsumer
Acceptera en indataparameter av typen long utan något returvärde.
26LongFunction<R>
Accepterar en långtyp-indataparameter och returnerar ett resultat.
27Långpredikat
R accepterar en lång indataparameter och returnerar ett boolskt resultat.
28LongSupplier
Ingen parameter, returnerar ett resultat av typen lång.
29LongToDoubleFunction
Accepterar en långtypindata och returnerar ett dubbeltypresultat.
30LongToIntFunction
Accepterar en långtyp-indata och returnerar ett resultat av int-typ.
31LongUnaryOperator
Acceptera en parameter av samma typ som lång, och returnera värdet av typen som också är långt.
32ObjDoubleConsumer<T>
Acceptera en objekttyp och en dubbeltyp-inmatningsparameter utan returvärde.
33ObjIntConsumer<T>
Acceptera indataparametrar av typen objekt och typ int utan något returvärde.
34ObjLongConsumer<T>
Accepterar indataparametrar för typ object och type long utan att returnera värden.
35Predikat<T>
Accepterar en indataparameter och returnerar ett boolesk resultat.
36Leverantör<T>
Inga parametrar, returnerar ett resultat.
37ToDoubleBiFunction<T,U>
Accepterar två indataparameterar och returnerar ett dubbeltypresultat
38TillDubbelfunktion<T>
Accepterar en indataparameter och returnerar ett dubbeltypresultat
39ToIntBiFunction<T,U>
Acceptera två indataparametrar och returnera ett resultat av int-typ.
40ToIntFunction<T>
Acceptera en indataparameter och returnera ett resultat av int-typ.
41ToLongBiFunction<T,U>
Acceptera två indataparametrar och returnera ett långtypresultat.
42ToLongFunction<T>
Acceptera en indataparameter och returnera ett resultat av lång typ.
43UnaryOperator<T>
Acceptera en parameter av typ T och returnera värdet av typ T.


JagDet funktionella gränssnittet i Java är delegaten i .NET/C#, passera metoden som en parameter, enligt följande:

Introduktion till C#-delegater (delegat, Handling, Func, predikat)
https://www.itsvse.com/thread-4658-1-1.html

Funktion Vanliga metoder och metoder och metoder

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

Även om Funktion< T, R > ta emot T-objekt, returnera R-objekt och endast ett mottagande och returnera objekt, men kombinerat med tupler kan flera inkommande och returnerande värden uppnås, hänse til:

Användningen av tupler i Java
https://www.itsvse.com/thread-10055-1-1.html

Exempel 1: Passa två värden och summera dem

Du kan använda plain writing och lambda-uttryck, koden är följande:





Exempel 2:

och Sedan metoden



Kompone-metoden



Fullständig kod



Resultat i returen



(Slut)




Föregående:Java FeignClient Interface-undantagslösning för flera identiska tjänstenamn
Nästa:MAVEN-projektet \TARGET\KLASSER\META-INF\MANIFEST. MF (system...
Publicerad på 2021-09-19 19:34:22 |
Java tittade också, även om det inte används
Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com