Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 24226|Válasz: 1

[Forrás] Részletes magyarázat a közös funkcionális interfészekről (delegáltákról) Java-ban

[Linket másol]
Közzétéve 2021. 09. 16. 9:28:21 | | | |
A JDK 1.8 API számos beépített funkcionális interfészt tartalmaz, például a régi Java-ban gyakran használt Comparator vagy Runnable interfészeket, amelyek @FunctionalInterface annotációkat adnak hozzá, hogy lambdákon is használhatók legyenek. Most értsük meg igazán a Funkció közös funkcióinak bejáratából.

névtípusleírás
FogyasztóFogyasztó< T >T objektumokat fogad, nem tér vissza értékeket
ÁllítmányPredikátum< T >Fogadja a T objektumot, és visszaadja a boole-t
FunkcióFunction< T, R >Fogadja a T objektumot, és visszaadja az R objektumot
SzállítóBeszállító< T >T-objektumokat (pl. növényeket) biztosítsunk értékek elfogadása nélkül
UnaryOperatorUnaryOperatorFogadja a T objektumot, és visszaadja a T objektumot
BinaryOperatorBinaryOperatorKét T objektumot fogadunk és T objektumokat küldjünk vissza


Egy FunctionalInterface-ként jelölt interfészt funkcionális interfésznek neveznek, amely csak egy egyedi módszerrel rendelkezhet, de tartalmazhat az objektumosztályból örökölt metódusokat is. Ha egy interfésznek csak egy módszere van, a fordító azt fogja gondolni, hogy az funkcionális interfész. Akár funkcionális interfészről van szó, akár nem, a következő pontokat kell megjegyezni:


  • Az annotáció csak az interfészeken jelölhető meg azzal, hogy "Csak egy absztrakt módszer létezik".
  • A JDK8 interfész statikus és alapértelmezett módszerei nem absztrakt módszerek.
  • Az interfész alapértelmezés szerint örökli a java.lang.Object címet, így ha az interfész azt mutatja, hogy a deklaráció felülírja az objektumban lévő metódust, akkor nem számít absztrakt metódnak.
  • Az annotáció nem szükséges, és ha egy interfész megfelel a "funkcionális interfész" definíciójának, akkor nincs hatása annak, hogy hozzáadják-e a jegyzetet vagy sem. Ráadásul az annotáció lehetővé teszi, hogy a fordító jobban ellenőrizze. Ha nem funkcionális interfészt írsz, de hozzáadsz @FunctionInterface, a fordító hibát jelent.
  • Ha két egyedi metódust definiálunk egy interfészben, egy érvénytelen '@FunctionalInterface' annotációt eredményez; A FunctionalInterfaceTest nem funkcionális interfészhiba.


java.util.function Számos osztályt tartalmaz a Java funkcionális programozásának támogatására, és a csomagban szereplő funkcionális interfészek a következők:

sorozatszám
Felület és leírás
1BiConsumer<T,U>
Egy olyan műveletet képvisel, amely két bemeneti paramétert fogad el, de nem ad eredményt
2BiFunction<T,U,R>
Egy olyan metódust képvisel, amely két bemeneti paramétert fogad el, és eredményt ad vissza
3BinaryOperator<T>
egy olyan műveletet képvisel, amely két, azonos típusú operátorra hat, és ugyanaz típusú operátor eredményét adja vissza
4Bipredikátus<T,U>
Egy kétparaméteres boolean érték módszert képvisel
5BooleanSupplier
A boole-érték eredmény szolgáltatóját képviseli
6Fogyasztó<T>
Egy olyan műveletet képvisel, amely elfogad egy bemeneti paramétert, de semmit sem ad vissza
7DoubleBinaryOperator
egy olyan akciót képvisel, amely két kétértékű operátorra hat, és a dupla érték eredményét adja vissza.
8DoubleConsumer
Egy olyan műveletet képvisel, amely kétszeres értékű paramétert fogad el, és nem ad vissza eredményt.
9DoubleFunction<R>
Egy olyan metódust képvisel, amely elfogad egy dupla értékű paramétert, és az eredményt adja vissza
10Kettős predikátum
Egy boole-érték módszert jelöl dupla értékparaméterrel
11DoubleSupplier
A kettős értékű struktúra szolgáltatóját képviseli
12DoubleToIntFunction
Elfogad egy dupla típusú bemenetet, és int-típusú eredményt ad vissza.
13DoubleToLongFunction
Elfogad egy dupla típusú bemenetet, és hosszú típusú eredményt ad vissza
14DoubleUnaryOperator
Ha elfogadunk egy azonos típusú paramétert duplázni, akkor a visszaadó érték típus is dupla.
15Funkció<T,R>
Elfogad egy bemeneti paramétert, és eredményt ad vissza.
16IntBinaryOperator
Elfogadjuk mindkét paramétert az int típusnak, és az int-típus értéket is visszaadjuk.
17IntConsumer
Elfogad egy int típusú bemeneti paramétert, amelynek nincs visszaküldési értéke.
18IntFunction<R>
Elfogad egy int típusú bemeneti paramétert, és eredményt ad vissza.
19Intpredikátum
: Elfogad egy int bemeneti paramétert, és egy boolean eredményt ad vissza.
20IntSupplier
Nincs paraméter, int típusú eredményt ad.
21IntToDoubleFunction
Elfogad egy int típusú bemenetet, és dupla típusú eredményt ad vissza.
22IntToLongFunction
Elfogad egy int típusú bemenetet, és hosszú típusú eredményt ad vissza.
23IntUnaryOperator
Fogadjunk el egy int típusú paramétert, és add vissza, hogy a típus is int.
24LongBinaryOperator
Fogadjuk el mindkét hosszút és a hosszú érték típusát is a hosszú típust.
25LongConsumer
Fogadj el egy hosszú típusú bemeneti paramétert, amelynek nincs visszavételi értéke.
26LongFunction<R>
Elfogad egy hosszú típusú bemeneti paramétert, és eredményt ad vissza.
27Hosszúpredikátum
R elfogad egy hosszú bemeneti paramétert, és egy boole-típusú eredményt ad vissza.
28LongSupplier
Paraméter nélkül, hosszú típusú eredményt ad vissza.
29LongToDoubleFunction
Hosszú típusú bemenetet fogad el, és dupla típusú eredményt ad vissza.
30LongToIntFunction
Elfogad egy hosszú típusú bemenetet, és egy int típusú eredményt ad vissza.
31LongUnaryOperator
Elfogadunk egy azonos típusú paramétert hosszúnak, és visszaadjuk, hogy a típus értéke is hosszú.
32ObjDoubleConsumer<T>
Fogadj el egy objektumtípust és egy dupla típusú bemeneti paramétert, amelynek nincs visszavételi értéke.
33ObjIntConsumer<T>
Fogadjuk el a type object és type int bemeneti paramétereket visszaadási érték nélkül.
34ObjLongConsumer<T>
Elfogadja a type object és type long bemeneti paramétereket anélkül, hogy értékeket adna vissza.
35Állítmány<T>
Elfogad egy bemeneti paramétert, és egy Boole-eredményt ad.
36Szállító<T>
Nincs paraméter, eredményt ad.
37ToDoubleBiFunction<T,U>
Két bemeneti paramétert fogad el, és dupla típusú eredményt ad
38ToDoubleFunction<T>
Elfogad egy bemeneti paramétert, és dupla típusú eredményt ad
39ToIntBiFunction<T,U>
Fogadj el két bemeneti paramétert, és adj vissza egy int típusú eredményt.
40ToIntFunction<T>
Fogadj el egy bemeneti paramétert, és küldj vissza egy int típusú eredményt.
41ToLongBiFunction<T,U>
Fogadj el két bemeneti paramétert, és adj vissza egy hosszú típusú eredményt.
42ToLongFunction<T>
Fogadj el egy bemeneti paramétert, és add vissza egy hosszú típusú eredményt.
43UnaryOperator<T>
Fogadj el egy T típusú paramétert, és add vissza a T típusú értéket.


ÉnA Java funkcionális interfésze a .NET/C# küldöttje, a metódust paraméterként adják meg, az alábbiak szerint:

Bevezetés a C# küldöttekhez (delegált, akció, funkció, predikátum)
https://www.itsvse.com/thread-4658-1-1.html

Funkciók Gyakori módszerek és gyakorlatok

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

Bár a függvény< T, R > T objektumot kap, R objektumot ad, és csak egy vevő- és visszaküldési objektumot kap, de tuplákkal kombinálva több bejövő és visszatérő érték érhető el, lásd a:

A tuple-ok használata Jáván
https://www.itsvse.com/thread-10055-1-1.html

1. példa: Két értéket adjunk át, és összegezzük őket

Használhatsz egyszerű írást és lambda kifejezéseket, a kód a következő:





2. példa:

ésThen módszer



Kompose módszer



Teljes kód



Visszatérési eredmények



(Vége)




Előző:Java FeignClient Interface kivételmegoldás több azonos szolgáltatásnévre
Következő:maven project \target\classes\META-INF\MANIFEST. MF (rendszer...
Közzétéve 2021. 09. 19. 19:34:22 |
Java is megnézte, bár nem használják
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com