Funkcinė Java sąsaja yra sąsaja, kurioje yra tik vienas abstraktus metodas. Funkcinės sąsajos gali turėti kelis numatytuosius arba statinius metodus, bet tik vieną abstraktų metodą.
Pradedant nuo „Java 8“, lambda išraiškos ir metodų nuorodos gali būti naudojamos funkcinės sąsajos egzemplioriui pavaizduoti.
Pavyzdys: Funkcinės sąsajos naudojimas su Lambda išraiška
Javapublic class Geeks { public static void main(String[] args) { // Using lambda expression to implement Runnable new Thread(() -> System.out.println('New thread created')).start(); } }
Išvestis
New thread created
Paaiškinimas:
- Aukščiau pateikta programa demonstruoja lambda išraiškos naudojimą su Runnable funkcine sąsaja.
- Runnable turi vieną abstraktų metodą run(), todėl jis laikomas funkcine sąsaja.
- Lambda ()-> System.out.println ('Sukurta nauja gija') apibrėžia run() metodą.
- new Thread().start() pradeda naują giją, kuri vykdo lambda korpusą
Pastaba:
A f neveiksminga sąsaja taip pat gali išplėsti kitą funkcinę sąsają.
dvejetainis medis vs bst
@Funkcinė sąsaja Anotacija
@FunctionalInterface anotacija naudojama siekiant užtikrinti, kad funkcinė sąsaja negalėtų turėti daugiau nei vieno abstrakčiojo metodo. Jei yra daugiau nei vienas abstraktus metodas, kompiliatorius pažymi pranešimą „Netikėta @FunctionalInterface anotacija“. Tačiau šios anotacijos naudoti neprivaloma.
Pastaba:
@FunctionalInterface anotacija yra neprivaloma, tačiau tai yra gera praktika. Tai padeda pastebėti klaidą ankstyvoje stadijoje, nes užtikrina, kad sąsajoje yra tik vienas abstraktus metodas.
Pavyzdys: funkcinės sąsajos apibrėžimas naudojant @FunctionalInterface anotaciją
Java@FunctionalInterface interface Square { int calculate(int x); } class Geeks { public static void main(String args[]) { int a = 5; // lambda expression to define the calculate method Square s = (int x) -> x * x; // parameter passed and return type must be same as defined in the prototype int ans = s.calculate(a); System.out.println(ans); } }
Išvestis
25
Paaiškinimas :
- Kvadratas yra funkcinė sąsaja su vienu skaičiavimo metodu (int x).
- Skaičiavimo metodui įgyvendinti naudojama lambda išraiška (int x) -> x * x.
- Lambda priima x kaip įvestį ir grąžina x * x.
„Java“ funkcinės sąsajos prieš „Java 8“.
Prieš „Java 8“ turėjome sukurti anoniminius vidinės klasės objektus arba įdiegti šias sąsajas. Toliau pateikiamas pavyzdys, kaip paleidžiama sąsaja buvo įdiegta prieš įvedant lambda išraiškas.
Pavyzdys: Java programa, skirta parodyti funkcinę sąsają
Javaclass Geeks { public static void main(String args[]) { // create anonymous inner class object new Thread(new Runnable() { @Override public void run() { System.out.println('New thread created'); } }).start(); } }
Išvestis
New thread created
Integruotos Java funkcinės sąsajos
Nuo Java SE 1.8 versijos yra daug sąsajų, kurios konvertuojamos į funkcines sąsajas. Visos šios sąsajos yra pažymėtos @FunctionalInterface. Šios sąsajos yra tokios:
- Galima paleisti: Šioje sąsajoje yra tik paleisti () metodas.
- Palyginti: Šioje sąsajoje yra tik palyginimas() metodas.
- ActionListener: Šioje sąsajoje yra tik metodas actionPerformed().
- Galima skambinti: Šioje sąsajoje yra tik call() metodas.
„Java“ funkcinių sąsajų tipai
„Java SE 8“ apima keturias pagrindines funkcines sąsajas, kurios gali būti taikomos keliose situacijose, kaip nurodyta toliau:
- Vartotojas
- Predikatas
- Funkcija
- Tiekėjas
1. Vartotojas
The vartotojo sąsaja funkcinė sąsaja yra ta, kuri priima tik vieną argumentą arba gentrifikuotą argumentą. Vartotojo sąsaja neturi grąžinimo vertės. Tai nieko negrąžina. Taip pat yra funkcinių Vartotojo variantų DoubleConsumer IntConsumer ir LongConsumer . Šie variantai priima primityvias reikšmes kaip argumentus.
Be šių variantų, yra dar vienas vartotojo sąsajos variantas, žinomas kaip Dvi vartotojas .
Sintaksė:
Vartotojas
vartotojas = (vertė) -> System.out.println(vertė);
Šis „Java Consumer“ funkcinės sąsajos įgyvendinimas atspausdina reikšmę, perduotą kaip parametrą spausdinimo sakiniui. Šis įgyvendinimas naudoja „Java“ funkciją „Lambda“.
2. Predikatas
The Predikatų sąsaja reiškia vieno argumento loginę funkciją. Jis dažniausiai naudojamas srautų filtravimo operacijoms. Kaip ir vartotojo funkcinė sąsaja, „Predicate“ funkcinė sąsaja taip pat turi tam tikrų plėtinių. Tai yra IntPredicate DoublePredicate ir Ilgasis Predikatas . Šio tipo predikatinės funkcinės sąsajos kaip argumentus priima tik primityvius duomenų tipus arba reikšmes.
Sintaksė:
viešoji sąsaja Predikatas
{
loginis testas(T t);
}
Java predikato funkcinė sąsaja taip pat gali būti įgyvendinta naudojant Lambda išraiškas.
java masyvo dalis
Predikatas
predikatas = (reikšmė) -> reikšmė != nulis;
3. Funkcija
A funkcija yra „Java“ funkcinės sąsajos tipas, kuris gauna tik vieną argumentą ir grąžina reikšmę po reikalaujamo apdorojimo. Daugelis skirtingų funkcijų sąsajų versijų yra instrumentinės ir dažniausiai naudojamos primityviuose tipuose, pavyzdžiui, double int long.
Sintaksė:
Funkcija
funkcija = (reikšmė) -> reikšmė * reikšmė;
- Dvi funkcija: The Dvi funkcija yra iš esmės susijęs su funkcija. Be to, reikia dviejų argumentų, o funkcija priima vieną argumentą.
- Unarinis operatorius ir dvejetainis operatorius: Taip pat yra dvi kitos funkcinės sąsajos, kurios pavadintos kaip Unary Operator ir Dvejetainis operatorius. Jie abu atitinkamai išplečia funkciją ir dvigubą funkciją, kai tiek įvesties, tiek išvesties tipai yra vienodi.
4. Tiekėjas
The Tiekėjas funkcinė sąsaja taip pat yra funkcinės sąsajos tipas, kuris nepriima jokios įvesties ar argumentų ir vis tiek grąžina vieną išvestį. Įvairūs tiekėjo funkcinės sąsajos plėtiniai turi daugybę kitų tiekėjų funkcijų, pvz BooleanSupplier DoubleSupplier LongSupplier ir IntSupplier . Visų šių tolesnių specializacijų grąžinimo tipas yra tik atitinkami primityvai.
Sintaksė:
Tiekėjas
tiekėjas = () -> 'Sveikas pasaulis!';
Pavyzdys: Predikato sąsajos naudojimas eilutėms filtruoti
Javaimport java.util.*; import java.util.function.Predicate; class Geeks { public static void main(String args[]) { // create a list of strings List<String> n = Arrays.asList('Geek' 'GeeksQuiz' 'g1' 'QA' 'Geek2'); // declare the predicate type as string and use lambda expression to create object Predicate<String> p = (s) -> s.startsWith('G'); // Iterate through the list for (String st : n) { // call the test method if (p.test(st)) System.out.println(st); } } }
Išvestis
Geek GeeksQuiz Geek2
Funkcinių sąsajų lentelė
Funkcinės sąsajos | Aprašymas | Metodas |
---|---|---|
Paleisti | Tai reiškia užduotį, kurią gali atlikti gija. | tuščias paleidimas () |
Palyginti | Jame palyginami du objektai užsakymui. | int palyginti Su(T o) |
ActionListener | Jis tvarko veiksmo įvykį įvykiais pagrįstame programavime. | anuliuotas veiksmas, atliktas (veiksmo įvykis e) |
Galima skambinti | Tai reiškia užduotį, kuri gali grąžinti rezultatą arba padaryti išimtį. | V call() meta Išimtį padaryti scenarijų vykdomąjį |
Vartotojas | Jis priima vieną įvesties argumentą ir nepateikia rezultato. | negaliojantis priėmimas (T t) |
Predikatas | Jis priima vieną argumentą ir pateikia loginį rezultatą. | Būlio testas (T t) |
Funkcija | Jis priima vieną argumentą ir pateikia rezultatą. | R taikyti (T t) |
Tiekėjas java pridėti prie masyvo | Tai nereikalauja jokių argumentų, bet duoda rezultatą. | Gauti () |
BiConsumer | Jis priima du argumentus ir nepateikia rezultato. | negalioja priėmimas (T t U u) |
BiPredicate | Jis priima du argumentus ir pateikia loginį rezultatą. | Būlio testas (T t U u) |
BiFunction | Jis priima du argumentus ir pateikia rezultatą. | R taikyti (T t U u) |
UnaryOperator | Tai ypatingas funkcijos atvejis, kai įvesties ir išvesties tipai yra vienodi. | T taikyti (T t) |
Dvejetainis operatorius | Tai ypatingas BiFunction atvejis, kai įvesties ir išvesties tipai yra vienodi. | T taikyti (T t1 T t2) |
Susiję straipsniai
- Java 8
- Java Lambda išraiškos