Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 24226|Atsakyti: 1

[Šaltinis] Išsamus bendrų funkcinių sąsajų (delegatų) paaiškinimas Java

[Kopijuoti nuorodą]
Paskelbta 2021-09-16 09:28:21 | | | |
JDK 1.8 API apima daug integruotų funkcinių sąsajų, tokių kaip "Comparator" arba "Runnable" sąsajos, dažniausiai naudojamos senojoje "Java", kurios prideda @FunctionalInterface komentarų, kad jas būtų galima naudoti lambdas. Dabar tikrai supraskime tai iš bendrų funkcijų įėjimo į funkciją.

vardas, pavadinimasrūšisapibūdinimas
VartotojasVartotojas< T >Priima T objektus, negrąžina reikšmių
TarinysPredikatas< T >Gauna objektą T ir grąžina loginį
FunkcijaFunkcija< T, R >Gauna T objektą ir grąžina R objektą
TiekėjasTiekėjas< T >Pateikite T objektus (pvz., augalus) nepriimdami reikšmių
UnaryOperatorUnaryOperatorGauna T objektą ir grąžina T objektą
Dvejetainis operatoriusDvejetainis operatoriusGauti du T objektus ir grąžinti T objektus


Sąsaja, pažymėta kaip FunctionalInterface, vadinama funkcine sąsaja, kuri gali turėti tik vieną pasirinktinį metodą, bet gali apimti metodus, paveldėtus iš objektų klasės. Jei sąsaja turi tik vieną metodą, kompiliatorius manys, kad tai yra funkcinė sąsaja. Nesvarbu, ar tai funkcinė sąsaja, ar ne, reikia atkreipti dėmesį į šiuos dalykus:


  • Anotaciją sąsajose galima pažymėti tik "Yra tik vienas abstraktus metodas".
  • Statiniai ir numatytieji metodai JDK8 sąsajoje nėra abstraktūs metodai.
  • Sąsaja pagal numatytuosius nustatymus paveldi java.lang.Object, todėl jei sąsaja rodo, kad deklaracija nepaiso objekto metodo, ji nelaikoma abstrakčiu metodu.
  • Anotacija nereikalinga, o jei sąsaja atitinka "funkcinės sąsajos" apibrėžimą, tai neturi jokios įtakos anotacijos pridėjimui, ar ne. Be to, anotacija leidžia kompiliatoriui geriau patikrinti. Jei parašysite neveikiančią sąsają, bet pridėsite @FunctionInterface, kompiliatorius praneš apie klaidą.
  • Apibrėžus du pasirinktinius metodus vienoje sąsajoje, bus rodomas netinkamas "@FunctionalInterface" komentaras; FunctionalInterfaceTest nėra funkcinės sąsajos klaida.


java.util.function Jame yra keletas klasių, palaikančių "Java" funkcinį programavimą, o šio paketo funkcinės sąsajos yra šios:

Serijos numeris
Sąsaja ir aprašymas
1BiConsumer<T,U>
Nurodo veiksmą, kuris priima du įvesties parametrus ir nepateikia rezultatų
2BiFunction<T,U,R>
Nurodo metodą, kuris priima du įvesties parametrus ir pateikia rezultatą
3Dvejetainis operatorius<T>
Nurodo veiksmą, veikiantį du to paties tipo operatorius ir pateikia to paties tipo operatoriaus rezultatą
4BiPredikatas<T,U>
Nurodo dviejų parametrų loginės reikšmės metodą
5Bulio energijos tiekėjas
Nurodo loginės reikšmės rezultato teikėją
6Vartotojas<T>
Nurodo operaciją, kuri priima įvesties parametrą ir nieko nepateikia
7Dvigubas dvejetainis operatorius
Nurodo veiksmą, kuris veikia du dvigubos reikšmės operatorius ir pateikia dvigubos reikšmės rezultatą.
8Dvigubas vartotojas
Nurodo veiksmą, kuris priima dvigubos reikšmės parametrą ir nepateikia rezultato.
9Dviguba funkcija<R>
Nurodo metodą, kuris priima dvigubos reikšmės parametrą ir pateikia rezultatą
10Dvigubas predikatas
Nurodo Bulio logikos reikšmės metodą su dvigubos reikšmės parametru
11Dvigubas tiekėjas
Atstovauja dvigubos vertės struktūros teikėjui
12DoubleToIntFunkcija
Priima dvigubo tipo įvestį ir pateikia int tipo rezultatą.
13DoubleToLongFunction
Priima dvigubo tipo įvestį ir pateikia ilgo tipo rezultatą
14DoubleUnaryOperator
Priimkite to paties tipo parametrą dvigubai, o grąžinamos reikšmės tipas taip pat yra dvigubas.
15Funkcija<T,R>
Priima įvesties parametrą, pateikia rezultatą.
16IntBinaryOperator
Priimkite abu int tipo parametrus ir grąžinamos reikšmės tipą int.
17"IntConsumer"
Priima int tipo įvesties parametrą be grąžinamos reikšmės.
18IntFunkcija<R>
Priima int tipo įvesties parametrą ir pateikia rezultatą.
19IntPredicate
: priima int įvesties parametrą ir pateikia loginį rezultatą.
20IntTiekėjas
Nėra parametrų, pateikia int tipo rezultatą.
21Funkcija "IntToDouble"
Priima int tipo įvestį ir pateikia dvigubo tipo rezultatą.
22IntToLongFunction
Priima int tipo įvestį ir pateikia ilgo tipo rezultatą.
23Tarptautinis operatorius
Priimkite parametrą, kurio tipas int, ir grąžinkite reikšmės tipą taip pat yra int.
24LongBinaryOperator
Priimti abu long ir grąžinamos reikšmės tipo parametrus kaip long.
25Ilgas vartotojas
Priimti įvesties parametrą, kurio tipas ilgas be grąžinamos reikšmės.
26Ilga funkcija<R>
Priima ilgo tipo įvesties parametrą ir pateikia rezultatą.
27Ilgas predikatas
R priima ilgą įvesties parametrą ir pateikia loginio tipo rezultatą.
28Ilgas tiekėjas
Nėra parametro, pateikia rezultatą, kurio tipas yra ilgas.
29Funkcija "LongToDouble"
Priima ilgo tipo įvestį ir pateikia dvigubo tipo rezultatą.
30LongToIntFunkcija
Priima ilgo tipo įvestį ir pateikia int tipo rezultatą.
31LongUnaryOperator
Priimkite to paties tipo parametrą kaip long ir grąžinkite reikšmę, kurios tipas taip pat yra ilgas.
32ObjDoubleConsumer<T>
Priimti objekto tipą ir dvigubo tipo įvesties parametrą be grąžinamos reikšmės.
33ObjIntVartotojas<T>
Priimti įvesties parametrus, kurių tipas yra objektas ir tipas int be grąžinamos reikšmės.
34ObjLongConsumer<T>
Priima įvesties parametrus, kurių tipas yra objektas ir tipas ilgas, negrąžinant reikšmių.
35Tarinys<T>
Priima įvesties parametrą ir pateikia Bulio logikos rezultatą.
36Tiekėjas<T>
Nėra parametrų, pateikia rezultatą.
37ToDoubleBiFunction<T,U>
Priima du įvesties parametrus ir pateikia dvigubo tipo rezultatą
38Dviguba funkcija<T>
Priima įvesties parametrą ir pateikia dvigubo tipo rezultatą
39ToIntBiFunction<T,U>
Priimkite du įvesties parametrus ir grąžinkite int tipo rezultatą.
40ToIntFunkcija<T>
Priimkite įvesties parametrą ir pateikite int tipo rezultatą.
41ToLongBiFunction<T,U>
Priimkite du įvesties parametrus ir pateikite ilgo tipo rezultatą.
42ToLongFunction<T>
Priimkite įvesties parametrą ir pateikite ilgo tipo rezultatą.
43UnaryOperator<T>
Priimkite T tipo parametrą ir grąžinkite T tipo reikšmę.


Funkcinė "Java" sąsaja yra .NET/C# atstovas, perduokite metodą kaip parametrą taip:

Įvadas į C# delegatus (delegatas, veiksmas, funkcija, predikatas)
https://www.itsvse.com/thread-4658-1-1.html

Funkcija Bendrieji metodai ir praktika

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

Nors funkcija< T, R > gauti T objektus, grąžinti R objektus ir tik vieną gauti ir grąžinti objektus, tačiau kartu su tupeliais, galima pasiekti kelias įeinančias ir grįžtančias reikšmes, žr.:


1 pavyzdys: perduokite dvi reikšmes ir susumuokite jas

Galite naudoti paprasto rašymo ir lambda išraiškas, kodas yra toks:





2 pavyzdys:

irTada metodas



Kūrimo metodas



Visas kodas



Grąžinti rezultatus



(Pabaiga)




Ankstesnis:"Java FeignClient" sąsajos išimties sprendimas keliems identiškiems tarnybų pavadinimams
Kitą:maven projektas \target\classes\META-INF\MANIFEST. MF (sistema...
Paskelbta 2021-09-19 19:34:22 |
"Java" taip pat atrodė, nors ji nenaudojama
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com