Funkcionāls Java interfeiss ir interfeiss, kas satur tikai vienu abstraktu metodi. Funkcionālajām saskarnēm var būt vairākas noklusējuma vai statiskas metodes, bet tikai viena abstraktā metode.
Sākot ar Java 8, lambda izteiksmes un metožu atsauces var izmantot, lai attēlotu funkcionāla interfeisa gadījumu.
Piemērs: Funkcionālā interfeisa izmantošana ar Lambda izteiksmi
Javapublic class Geeks { public static void main(String[] args) { // Using lambda expression to implement Runnable new Thread(() -> System.out.println('New thread created')).start(); } }
Izvade
New thread created
Paskaidrojums:
vlc multivides atskaņotāja lejupielāde youtube
- Iepriekš minētā programma parāda lambda izteiksmes izmantošanu ar Runnable funkcionālo saskarni.
- Runnable ir viena abstrakta metode run(), tāpēc tā tiek kvalificēta kā funkcionāls interfeiss.
- Lambda ()-> System.out.println ('Izveidots jauns pavediens') definē run() metodi.
- new Thread().start() sāk jaunu pavedienu, kas izpilda lambda pamattekstu
Piezīme:
A f unctional interfeiss var arī paplašināt citu funkcionālu interfeisu.
@FunctionalInterface Anotācija
@FunctionalInterface anotācija tiek izmantota, lai nodrošinātu, ka funkcionālajā saskarnē nevar būt vairāk par vienu abstraktu metodi. Ja ir vairākas abstraktas metodes, kompilators atzīmē ziņojumu “Negaidīta @FunctionalInterface anotācija”. Tomēr šīs anotācijas izmantošana nav obligāta.
Piezīme:
@FunctionalInterface anotācija nav obligāta, taču tā ir laba prakse. Tas palīdz novērst kļūdu agrīnā stadijā, pārliecinoties, ka saskarnei ir tikai viena abstrakta metode.
Piemērs: funkcionālās saskarnes definēšana ar @FunctionalInterface anotāciju
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); } }
Izvade
25
Paskaidrojums :
- Kvadrāts ir funkcionāls interfeiss ar vienu aprēķinu metodi (int x).
- Aprēķinu metodes ieviešanai tiek izmantota lambda izteiksme (int x) -> x * x.
- Lambda izmanto x kā ievadi un atgriež x * x.
Java funkcionālās saskarnes pirms Java 8
Pirms Java 8 mums bija jāizveido anonīmi iekšējās klases objekti vai jāievieš šīs saskarnes. Tālāk ir parādīts piemērs tam, kā palaist saskarne tika ieviesta pirms lambda izteiksmju ieviešanas.
Piemērs: Java programma funkcionālā interfeisa demonstrēšanai
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(); } }
Izvade
New thread created
Iebūvētas Java funkcionālās saskarnes
Kopš Java SE 1.8 ir daudz saskarņu, kas tiek pārveidotas par funkcionālām saskarnēm. Visas šīs saskarnes ir anotētas ar @FunctionalInterface. Šīs saskarnes ir šādas:
- Darbināms: Šis interfeiss satur tikai palaist () metodi.
- Salīdzināms: Šajā saskarnē ir ietverta tikai metode salīdzinātTo().
- ActionListener: Šajā saskarnē ir ietverta tikai metode actionPerformed().
- Zvanāms: Šajā interfeisā ir tikai call() metode.
Funkcionālo saskarņu veidi Java
Java SE 8 ietvēra četrus galvenos funkcionālo saskarņu veidus, kurus var izmantot vairākās situācijās, kā minēts tālāk:
- Patērētājs
- Predikāts
- Funkcija
- Piegādātājs
1. Patērētājs
The patērētāja saskarne funkcionālā saskarne ir tā, kas pieņem tikai vienu argumentu vai ģentrificētu argumentu. Patērētāja saskarnei nav atdeves vērtības. Tas neko neatdod. Ir arī Patērētāja funkcionālie varianti DoubleConsumer IntConsumer un LongConsumer . Šie varianti pieņem primitīvas vērtības kā argumentus.
Izņemot šos variantus, ir arī vēl viens patērētāja saskarnes variants, kas pazīstams kā Divpatērētājs .
Sintakse:
Patērētājs
patērētājs = (vērtība) -> System.out.println(vērtība);
Šī Java Consumer funkcionālās saskarnes ieviešana izdrukā vērtību, kas nodota kā parametrs drukas priekšrakstam. Šajā implementācijā tiek izmantota Java Lambda funkcija.
2. Predikāts
The Predikātu saskarne apzīmē viena argumenta Būla vērtību. To parasti izmanto filtrēšanas darbībām straumēs. Tāpat kā patērētāju funkcionālajam interfeisam Predicate funkcionālajam interfeisam ir arī daži paplašinājumi. Šīs ir IntPredicate DoublePredicate un LongPredicate . Šāda veida predikātu funkcionālās saskarnes kā argumentus pieņem tikai primitīvus datu tipus vai vērtības.
Sintakse:
publiska saskarne Predikāts
{
Būla tests(T t);
}
Java predikātu funkcionālo interfeisu var ieviest arī, izmantojot Lambda izteiksmes.
Predikāts
predikāts = (vērtība) -> vērtība != null; sakārtot pēc nejaušības principa SQL
3. Funkcija
A funkciju ir Java funkcionālas saskarnes veids, kas saņem tikai vienu argumentu un atgriež vērtību pēc nepieciešamās apstrādes. Daudzas dažādas funkciju saskarņu versijas ir instrumentālas, un tās parasti izmanto primitīvos veidos, piemēram, double int long.
Sintakse:
Funkcija
funkcija = (vērtība) -> vērtība * vērtība;
- Divfunkcija: The Divfunkcija ir būtiski saistīts ar funkciju. Turklāt tam ir nepieciešami divi argumenti, savukārt funkcija pieņem vienu argumentu.
- Unārais operators un binārais operators: Ir arī divas citas funkcionālās saskarnes, kas tiek nosauktas kā Unārs operators un Binārais operators. Tie abi paplašina funkciju un divfunkciju attiecīgi, ja gan ievades veids, gan izvades veids ir vienāds.
4. Piegādātājs
The Piegādātājs funkcionālais interfeiss ir arī funkcionālas saskarnes veids, kas neizmanto nekādu ievadi vai argumentu un tomēr atgriež vienu izvadi. Piegādātāja funkcionālās saskarnes dažādie paplašinājumi nodrošina daudzas citas piegādātāja funkcijas, piemēram BooleanSupplier DoubleSupplier LongSupplier un IntSupplier . Visu šo turpmāko specializāciju atgriešanās veids ir tikai tiem atbilstošie primitīvie.
Sintakse:
Piegādātājs
piegādātājs = () -> 'Sveika pasaule!';
Piemērs: Predikātu interfeisa izmantošana virkņu filtrēšanai
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); } } }
Izvade
Geek GeeksQuiz Geek2
Funkcionālo saskarņu tabula
Funkcionālās saskarnes | Apraksts | Metode |
|---|---|---|
Palaist java struktūra | Tas apzīmē uzdevumu, ko var izpildīt, izmantojot pavedienu. | tukša palaišana () |
Salīdzināms | Tas salīdzina divus objektus pasūtīšanai. | int salīdzinātTo(T o) |
ActionListener | Tas apstrādā darbības notikumu notikumu virzītā programmēšanā. | anulēta darbībaVeikts(ActionEvent e) |
Sazvanāms | Tas apzīmē uzdevumu, kas var atgriezt rezultātu vai radīt izņēmumu. | V call() met Izņēmums |
Patērētājs | Tas pieņem vienu ievades argumentu un neatgriež rezultātu. | anulēt pieņemt (T t) |
Predikāts | Tas pieņem vienu argumentu un atgriež Būla rezultātu. | Būla tests (T t) |
Funkcija | Tas pieņem vienu argumentu un atgriež rezultātu. | R pieteikties (T t) alfa beta atzarošanas piemērs |
Piegādātājs | Tas neprasa nekādus argumentus, bet sniedz rezultātu. | Saņemt () |
BiPatērētājs | Tas pieņem divus argumentus un neatgriež rezultātu. | anulēts pieņemt (T t U u) |
BiPredicate | Tas pieņem divus argumentus un atgriež Būla rezultātu. | Būla tests (T t U u) |
BiFunction | Tas pieņem divus argumentus un atgriež rezultātu. | Pieteikties (T t U u) java char uz veselu skaitli |
UnaryOperator | Šis ir īpašs funkcijas gadījums, kad ievades un izvades veidi ir vienādi. | T pieteikties (T t) |
Binārais operators | Šis ir īpašs BiFunction gadījums, kad ievades un izvades veidi ir vienādi. | T piemērot (T t1 T t2) |
Saistītie raksti
- Java 8
- Java Lambda izteiksmes