See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 24226|Vastuse: 1

[Allikas] Üksikasjalik selgitus levinud funktsionaalsetest liidestest (delegaatidest) Javas

[Kopeeri link]
Postitatud 16.09.2021 09:28:21 | | | |
JDK 1.8 API sisaldab palju sisseehitatud funktsionaalseid liideseid, nagu Comparator või Runnable liidesed, mida vanades Javas sageli kasutati ja mis lisavad @FunctionalInterface annotatsioone, et neid saaks lambdadel kasutada. Nüüd mõistame seda tõeliselt Functioni tavapäraste funktsioonide sisenemisest.

Nimiliikkirjeldus
TarbijaTarbija< T >Võtab vastu T objekti, ei tagasta väärtusi
PredikaatPredikaat< T >Võtab vastu T-objekti ja tagastab boole'i
FunktsioonFunktsioon< T, R >Võtab vastu T objekti ja tagastab R objekti
TarnijaTarnija< T >Anna T-objekte (nt taimed) ilma väärtusi aktsepteerimata
UnaryOperatorUnaryOperatorVõtab vastu T objekti ja tagastab T objekti
BinaryOperatorBinaryOperatorVõta vastu kaks T objekti ja tagasta T objektid


Funktsionaalliideseks märgistatud liidest nimetatakse funktsionaalliideseks, millel võib olla ainult üks kohandatud meetod, kuid mis võib sisaldada ka objektklassist päritud meetodeid. Kui liidesel on ainult üks meetod, arvab kompilaator, et see on funktsionaalne liides. Olenemata sellest, kas tegemist on funktsionaalse liides või mitte, tuleb märkida järgmised punktid:


  • Annotatsiooni saab liidestel märkida ainult sõnaga "On ainult üks abstraktne meetod".
  • JDK8 liidese staatilised ja vaikimisi meetodid ei ole abstraktsed meetodid.
  • Liides pärib vaikimisi java.lang.Object, seega kui liides näitab, et deklaratsioon tühistab objekti meetodi, ei loeta seda abstraktseks meetodiks.
  • Annotatsioon ei ole vajalik ning kui liides vastab "funktsionaalse liidese" definitsioonile, ei mõjuta see, kas annotatsioon lisatakse või mitte. Lisaks võimaldab annotatsioon kompilaatoril paremini kontrollida. Kui kirjutad mittefunktsionaalse liidese, kuid lisad @FunctionInterface, teatab kompilaator veast.
  • Kahe kohandatud meetodi määratlemine ühes liideses annab kehtetu '@FunctionalInterface' annotatsiooni; FunctionalInterfaceTest ei ole funktsionaalse liidese viga.


java.util.function See sisaldab mitmeid klasse, mis toetavad Java funktsionaalset programmeerimist, ning selle paketi funktsionaalsed liidesed on:

Seerianumber
Liides ja kirjeldus
1BiConsumer<T,U>
Esindab tegevust, mis aktsepteerib kahte sisendparameetrit ja ei anna tulemusi
2BiFunction<T,U,R>
Esindab meetodit, mis aktsepteerib kahte sisendparameetrit ja tagastab tulemuse
3BinaryOperator<T>
esindab tegevust, mis toimib kahele sama tüüpi operaatorile ja tagastab sama tüüpi operaatori tulemuse
4Bipredikaat<T,U>
Esindab kaheparameetrilist boole'i väärtuse meetodit
5BooleanSupplier
Esindab boole'i väärtuse tulemuse pakkujat
6Tarbija<T>
Esindab operatsiooni, mis aktsepteerib sisendparameetrit ja ei tagasta midagi
7DoubleBinaryOperator
esindab tegevust, mis toimib kahe kahekordse väärtusega operaatori suhtes ja tagastab topeltväärtuse tulemuse.
8DoubleConsumer
Esindab tegevust, mis aktsepteerib topeltväärtust ega tagasta tulemust.
9DoubleFunction<R>
Esindab meetodit, mis aktsepteerib kahekordse väärtusega parameetrit ja tagastab tulemuse
10Topeltpredikaat
Esindab boole'i väärtuse meetodit kahekordse väärtuse parameetriga
11DoubleSupplier
Esindab topeltväärtusega struktuuri pakkujat
12DoubleToIntFunction
Võtab vastu topelttüübi sisendi ja tagastab int-tüüpi tulemuse.
13DoubleToLongFunction
Võtab vastu topelttüübi sisendi ja tagastab pika tüübi tulemuse
14DoubleUnaryOperator
Kui aktsepteerida sama tüüpi parameetrit topelt, on tagastusväärtuse tüüp samuti kahekordne.
15Funktsioon<T,R>
Võtab vastu sisendparameetri, tagastab tulemuse.
16IntBinaryOperator
Aktsepteeri mõlemat tüüpi int ja väärtust int.
17IntConsumer
Võtab vastu sisendparameetri tüübiga int ilma tagastusväärtuseta.
18IntFunction<R>
Võtab vastu int tüüpi sisendparameetri ja tagastab tulemuse.
19Intpredikaat
: Aktsepteerib int sisendparameetrit ja tagastab boole'i tulemuse.
20IntSupplier
Parameetreid pole, tagastab int tüübi tulemuse.
21IntToDoubleFunction
Võtab vastu int tüüpi sisendi ja tagastab topelttüübi tulemuse.
22IntToLongFunction
Võtab vastu int tüüpi sisendi ja tagastab pika tüübi tulemuse.
23IntUnaryOperator
Võta vastu parameeter tüübiga int, ja tagasta väärtus ka int.
24LongBinaryOperator
Aktsepteeri mõlemat parameetrit type long ja return value type kui long.
25LongConsumer
Aktsepteeri pika tüüpi sisendparameeter ilma tagastusväärtuseta.
26LongFunction<R>
Võtab vastu pika tüübi sisendparameetri ja tagastab tulemuse.
27Pikk predikaat
R aktsepteerib pikka sisendparameetrit ja tagastab boole'i tüüpi tulemuse.
28LongSupplier
Ilma parameetrita tagastab tulemuse tüübi pikkus.
29LongToDoubleFunction
Võtab vastu pika tüübi sisendi ja tagastab topelttüübi tulemuse.
30LongToIntFunction
Võtab vastu pika tüübi sisendi ja tagastab int tüüpi tulemuse.
31LongUnaryOperator
Võta vastu sama tüüpi parameeter kui pikk ja tagasta väärtus, mis on samuti pikk.
32ObjDoubleConsumer<T>
Aktsepteeri objekti tüüpi ja topelttüüpi sisendparameeter ilma tagastusväärtuseta.
33ObjIntConsumer<T>
Võta vastu sisendparameetrid tüübi objekti ja tüübi int ilma tagastusväärtuseta.
34ObjLongConsumer<T>
Võtab vastu sisendparameetreid tüübi objekti ja tüübi pikkuse ilma väärtusi tagastamata.
35Predikaat<T>
Võtab vastu sisendparameetri ja tagastab Boole'i tulemuse.
36Tarnija<T>
Ilma parameetriteta tagastab tulemuse.
37ToDoubleBiFunction<T,U>
Võtab vastu kaks sisendparameetrit ja tagastab topelttüübi tulemuse
38ToDoubleFunction<T>
Võtab vastu sisendparameetri ja tagastab topelttüübi tulemuse
39ToIntBiFunction<T,U>
Võta vastu kaks sisendparameetrit ja tagasta int tüüpi tulemus.
40ToIntFunction<T>
Võta vastu sisendparameeter ja tagasta int tüüpi tulemus.
41ToLongBiFunction<T,U>
Võta vastu kaks sisendparameetrit ja tagasta pika tüübi tulemus.
42ToLongFunction<T>
Aktsepteeri sisendparameeter ja tagasta pikk tüübi tulemus.
43UnaryOperator<T>
Võta vastu parameeter tüübiga T ja tagasta väärtus tüüp T.


MinaJava funktsionaalne liides on .NET/C# delegaat, esitab meetodi parameetrina, järgmiselt:

Sissejuhatus C# delegaatidesse (delegaat, tegevus, funktsioon, predikaat)
https://www.itsvse.com/thread-4658-1-1.html

Funktsioon Levinud meetodid ja praktikad

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

Kuigi funktsioon< T, R > saab T objekti, tagastab R objekti ja ainult ühe vastuvõtu- ja tagasituleku objekti, kuid koos tuplitega saab saavutada mitu sissetulevat ja tagastavat väärtust, viidake:


Näide 1: Anna kaks väärtust ja summeeri need

Sa võid kasutada lihtsat kirja ja lambda väljendeid, kood on järgmine:





Näide 2:

ja siis meetod



Compose meetod



Täiskood



Tagasipöördumise tulemused



(Lõpp)




Eelmine:Java FeignClient Interface erandlahendus mitme identse teenusenime jaoks
Järgmine:Maven Project \Target\Classes\META-INF\MANIFEST. MF (süsteem...
Postitatud 19.09.2021 19:34:22 |
Java vaatas samuti, kuigi seda ei kasutata
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com