Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 24226|Răspunde: 1

[Sursă] Explicație detaliată a interfețelor funcționale comune (delegați) în Java

[Copiază linkul]
Postat pe 16.09.2021 09:28:21 | | | |
API-ul JDK 1.8 include multe interfețe funcționale încorporate, cum ar fi interfețele Comparator sau Runnable, folosite frecvent în Java vechi, care adaugă @FunctionalInterface adnotări pentru a putea fi folosite pe lambda. Acum, să înțelegem cu adevărat asta din introducerea funcțiilor comune în Funcție.

numetipdescriere
ConsumatorConsumator< T >Primește T obiecte, nu returnează valori
PredicatPredicat< T >Primește obiectul T și returnează booleanul
FuncționaFuncție< T, R >Primește obiectul T și returnează obiectul R
FurnizorFurnizor< T >Furnizați obiecte T (de exemplu, plante) fără a accepta valori
UnaryOperatorUnaryOperatorPrimește obiectul T și returnează obiectul T
BinaryOperatorBinaryOperatorPrimește două obiecte T și returnează obiecte T


O interfață etichetată ca FunctionalInterface se numește interfață funcțională, care poate avea o singură metodă personalizată, dar poate include metode moștenite din clasa obiect. Dacă o interfață are o singură metodă, compilatorul va considera că este o interfață funcțională. Indiferent dacă este o interfață funcțională sau nu, următoarele aspecte trebuie notate:


  • Adnotarea poate fi marcată doar pe interfețele cu "Există o singură metodă abstractă".
  • Metodele statice și implicite din interfața JDK8 nu sunt metode abstracte.
  • Interfața moștenește implicit java.lang.Object, astfel încât dacă interfața arată că declarația suprascrie metoda din Obiect, aceasta nu este considerată o metodă abstractă.
  • Adnotarea nu este obligatorie, iar dacă o interfață îndeplinește definiția unei "interfețe funcționale", nu are efect dacă adnotarea este adăugată sau nu. În plus, adnotarea permite compilatorului să verifice mai bine. Dacă scrii o interfață nefuncțională, dar adaugi @FunctionInterface, compilatorul va raporta o eroare.
  • Definirea a două metode personalizate într-o singură interfață va duce la o adnotare '@FunctionalInterface' invalidă; FunctionalInterfaceTest nu este o eroare de interfață funcțională.


java.util.function Conține mai multe clase pentru a susține programarea funcțională Java, iar interfețele funcționale din acest pachet sunt:

Număr de serie
Interfață & Descriere
1BiConsumer<T,U>
Reprezintă o acțiune care acceptă doi parametri de intrare și nu returnează niciun rezultat
2BiFuncție<T,U,R>
Reprezintă o metodă care acceptă doi parametri de intrare și returnează un rezultat
3BinaryOperator<T>
reprezintă o acțiune care acționează asupra a doi operatori de același tip și returnează rezultatul aceluiași tip de operator
4BiPredicate<T,U>
Reprezintă o metodă a valorii booleene cu doi parametri
5BooleanSupplier
Reprezintă furnizorul rezultatului valorii booleene
6Consumator<T>
Reprezintă o operație care acceptă un parametru de intrare și nu returnează nimic
7DoubleBinaryOperator
reprezintă o acțiune care acționează asupra a doi operatori cu valoare dublă și returnează rezultatul unei valori duble.
8DoubleConsumer
Reprezintă o acțiune care acceptă un parametru de valoare dublă și nu returnează un rezultat.
9DoubleFunction<R>
Reprezintă o metodă care acceptă un parametru cu valori duble și returnează rezultatul
10DubluPredicat
Reprezintă o metodă a valorii booleene cu un parametru de valoare dublă
11DoubleSupplier
Reprezintă furnizorul unei structuri cu valoare dublă
12DoubleToIntFunction
Acceptă o intrare de tip dublu și returnează un rezultat de tip int.
13DoubleToLongFunction
Acceptă o intrare de tip dublu și returnează un rezultat de tip lung
14DoubleUnaryOperator
Acceptăm un parametru de același tip dublu, iar valoarea returnată este de asemenea dublă.
15Funcție<T,R>
Acceptă un parametru de intrare, returnează un rezultat.
16IntBinaryOperator
Acceptați atât parametrii de tip int, cât și returnați valoarea de tip int.
17IntConsumer
Acceptă un parametru de intrare de tip int fără valoare de returnare.
18IntFunction<R>
Acceptă un parametru de intrare de tip int și returnează un rezultat.
19IntPredicate
: Acceptă un parametru de intrare int și returnează un rezultat boolean.
20IntSupplier
Fără parametri, returnează un rezultat de tip int.
21IntToDoubleFunction
Acceptă o intrare de tip int și returnează un rezultat de tip dublu.
22IntToLongFunction
Acceptă o intrare de tip int și returnează un rezultat lung de tip.
23IntUnaryOperator
Acceptă un parametru de tip int și returnează valoarea tipului este tot int.
24LongBinaryOperator
Acceptați atât parametrii de tip lung, cât și de returnare a valorii tipului ca long.
25LongConsumer
Acceptă un parametru de intrare de tip lung fără valoare de returnare.
26FuncțieLungă<R>
Acceptă un parametru de intrare de tip lung și returnează un rezultat.
27LongPredicat
R acceptă un parametru de intrare lung și returnează un rezultat de tip boolean.
28LongSupplier
Fără parametru, returnează un rezultat de tip long.
29LongToDoubleFunction
Acceptă o intrare de tip lung și returnează un rezultat de tip dublu.
30LongToIntFunction
Acceptă o intrare de tip lung și returnează un rezultat de tip int.
31LongUnaryOperator
Acceptăm un parametru de același tip ca lung și returnăm valoarea tipului este de asemenea lungă.
32ObjDoubleConsumer<T>
Acceptă un tip de obiect și un parametru de intrare de tip dublu fără valoare de returnare.
33ObjIntConsumer<T>
Acceptă parametrii de intrare ai obiectului tip și int, fără valoare de returnare.
34ObjLongConsumer<T>
Acceptă parametrii de intrare ai obiectului tip și al lungului tip fără a returna valorile.
35Predicat<T>
Acceptă un parametru de intrare și returnează un rezultat boolean.
36Furnizor<T>
Fără parametri, returnează un rezultat.
37ToDoubleBiFunction<T,U>
Acceptă doi parametri de intrare și returnează un rezultat de tip dublu
38ToDoubleFunction<T>
Acceptă un parametru de intrare și returnează un rezultat de tip dublu
39ToIntBiFunction<T,U>
Acceptă doi parametri de intrare și returnează un rezultat de tip int.
40ToIntFunction<T>
Acceptă un parametru de intrare și returnează un rezultat de tip int.
41Către LongBiFuncție<T,U>
Acceptă doi parametri de intrare și returnează un rezultat de tip lung.
42ToLongFunction<T>
Acceptă un parametru de intrare și returnează un rezultat de tip lung.
43UnaryOperator<T>
Acceptă un parametru de tip T și returnează valoarea de tip T.


EuInterfața funcțională în Java este delegatul în .NET/C#, trece metoda ca parametru, după cum urmează:

Introducere în delegații C# (delegat, Acțiune, Func, predicat)
https://www.itsvse.com/thread-4658-1-1.html

Funcția Metode și Practici Comune

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

Deși Funcția< T, R > primește T obiecte, returnează R obiecte și doar un primește și returnează obiecte, dar combinate cu tuple-uri, pot fi atinse multiple valori de intrare și returnare, se referă la:


Exemplul 1: Trece două valori și însumează-le

Poți folosi scriere simplă și expresii lambda, codul fiind următorul:





Exemplul 2:

Metoda și apoi



Metoda Compose



Cod complet



Rezultate ale retururilor



(Sfârșit)




Precedent:Soluție de excepții Java FeignClient Interface pentru mai multe nume identice de servicii
Următor:Maven Project \target\Classes\META-INF\MANIFEST. MF (sistem...
Postat pe 19.09.2021 19:34:22 |
Java a căutat și ea, deși nu este folosită
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com