logo

Java toiminnalliset rajapinnat

Käyttöliittymää, joka sisältää täsmälleen yhden abstraktin menetelmän, kutsutaan toiminnalliseksi rajapinnaksi. Siinä voi olla mikä tahansa määrä oletusarvoisia staattisia menetelmiä, mutta se voi sisältää vain yhden abstraktin menetelmän. Se voi myös ilmoittaa objektiluokan menetelmiä.

Functional Interface tunnetaan myös nimellä Single Abstract Method Interfaces tai SAM Interfaces. Se on Javassa uusi ominaisuus, joka auttaa saavuttamaan toimivan ohjelmoinnin lähestymistavan.


Esimerkki 1

 @FunctionalInterface interface sayable{ void say(String msg); } public class FunctionalInterfaceExample implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample fie = new FunctionalInterfaceExample(); fie.say('Hello there'); } } 
Testaa nyt

Lähtö:

 Hello there 

Toiminnallisella rajapinnalla voi olla olioluokan menetelmiä. Katso seuraava esimerkki.

Esimerkki 2

 @FunctionalInterface interface sayable{ void say(String msg); // abstract method // It can contain any number of Object class methods. int hashCode(); String toString(); boolean equals(Object obj); } public class FunctionalInterfaceExample2 implements sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample2 fie = new FunctionalInterfaceExample2(); fie.say('Hello there'); } } 
Testaa nyt

Lähtö:

 Hello there 

Virheellinen toiminnallinen käyttöliittymä

Toiminnallinen käyttöliittymä voi laajentaa toista rajapintaa vain, jos sillä ei ole abstraktia menetelmää.

 interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); } 

Lähtö:

 compile-time error 

Esimerkki 3

Seuraavassa esimerkissä toiminnallinen käyttöliittymä laajenee ei-toiminnalliseksi rajapinnaksi.

 interface Doable{ default void doIt(){ System.out.println('Do it now'); } } @FunctionalInterface interface Sayable extends Doable{ void say(String msg); // abstract method } public class FunctionalInterfaceExample3 implements Sayable{ public void say(String msg){ System.out.println(msg); } public static void main(String[] args) { FunctionalInterfaceExample3 fie = new FunctionalInterfaceExample3(); fie.say('Hello there'); fie.doIt(); } } 
Testaa nyt

Lähtö:

 Hello there Do it now 

Java valmiiksi määritellyt toiminnalliset rajapinnat

Java tarjoaa ennalta määritellyt toiminnalliset rajapinnat toiminnallisen ohjelmoinnin käsittelemiseksi lambda- ja menetelmäviittauksilla.

Voit myös määrittää oman mukautetun toiminnallisen käyttöliittymän. Seuraavassa on luettelo toiminnallisista käyttöliittymistä, jotka on sijoitettu java.util.function -pakettiin.


Käyttöliittymä Kuvaus
BiConsumer Se edustaa toimintoa, joka hyväksyy kaksi syöttöargumenttia eikä palauta tulosta.
Kuluttaja Se edustaa toimintoa, joka hyväksyy yhden argumentin eikä palauta tulosta.
Toiminto Se edustaa funktiota, joka hyväksyy yhden argumentin ja palauttaa tuloksen.
Predikaatti Se edustaa yhden argumentin predikaattia (boolen arvoinen funktio).
BiFunction Se edustaa funktiota, joka hyväksyy kaksi argumenttia ja palauttaa tuloksen.
Binaarioperaattori Se edustaa operaatiota kahdelle saman tietotyypin operandille. Se palauttaa samantyyppisen tuloksen kuin operandit.
BiPredicate Se edustaa kahden argumentin predikaattia (boolen arvoinen funktio).
BooleanSupplier Se edustaa Boolen arvoisten tulosten toimittajaa.
DoubleBinaryOperator Se edustaa toimintoa kahdelle kaksoistyypin operandille ja palauttaa kaksoistyypin arvon.
DoubleConsumer Se edustaa toimintoa, joka hyväksyy yhden kaksoistyypin argumentin eikä palauta tulosta.
DoubleFunction Se edustaa funktiota, joka hyväksyy kaksoistyypin argumentin ja tuottaa tuloksen.
DoublePredicate Se edustaa yhden kaksoistyypin argumentin predikaattia (boolen arvoinen funktio).
DoubleSupplier Se edustaa kaksoistyyppisten tulosten toimittajaa.
DoubleToIntFunction Se edustaa funktiota, joka hyväksyy kaksoistyypin argumentin ja tuottaa int-tyypin tuloksen.
DoubleToLongFunction Se edustaa funktiota, joka hyväksyy kaksoistyypin argumentin ja tuottaa pitkän tyyppisen tuloksen.
DoubleUnaryOperator Se edustaa yhden kaksoistyyppisen operandin operaatiota, joka tuottaa kaksoistyypin tuloksen.
IntBinaryOperator Se edustaa toimintoa kahdelle int-tyypin operandille ja palauttaa int-tyypin tuloksen.
IntConsumer Se edustaa toimintoa, joka hyväksyy yhden kokonaislukuargumentin eikä palauta tulosta.
IntFunction Se edustaa funktiota, joka hyväksyy kokonaislukuargumentin ja palauttaa tuloksen.
IntPredicate Se edustaa yhden kokonaislukuargumentin predikaattia (boolen arvoinen funktio).
IntSupplier Se edustaa kokonaislukutyyppistä toimittajaa.
IntToDoubleFunction Se edustaa funktiota, joka hyväksyy kokonaislukuargumentin ja palauttaa tuplaarvon.
IntToLongFunction Se edustaa funktiota, joka hyväksyy kokonaislukuargumentin ja palauttaa pitkän.
IntUnaryOperator Se edustaa operaatiota yksittäiselle kokonaislukuoperandille, joka tuottaa kokonaislukutuloksen.
LongBinaryOperator Se edustaa operaatiota kahdelle pitkän tyypin operandille ja palauttaa pitkän tyypin tuloksen.
LongConsumer Se edustaa toimintoa, joka hyväksyy yhden pitkän tyyppisen argumentin eikä palauta tulosta.
LongFunction Se edustaa funktiota, joka hyväksyy pitkän tyyppisen argumentin ja palauttaa tuloksen.
Pitkä Predikaatti Se edustaa yhden pitkän tyyppisen argumentin predikaattia (boolen arvoinen funktio).
LongSupplier Se edustaa pitkän tyyppisten tulosten toimittajaa.
LongToDoubleFunction Se edustaa funktiota, joka hyväksyy pitkän tyypin argumentin ja palauttaa kaksoistyypin tuloksen.
LongToIntFunction Se edustaa funktiota, joka hyväksyy pitkän tyypin argumentin ja palauttaa kokonaisluvun tuloksen.
LongUnaryOperator Se edustaa yhden pitkän tyypin operandin toimintoa, joka palauttaa pitkän tyypin tuloksen.
ObjDoubleConsumer Se edustaa toimintoa, joka hyväksyy objektin ja kaksoisargumentin, eikä palauta tulosta.
ObjIntConsumer Se edustaa toimintoa, joka hyväksyy objektin ja kokonaislukuargumentin. Se ei palauta tulosta.
ObjLongConsumer Se edustaa toimintoa, joka hyväksyy objektin ja pitkän argumentin, se ei palauta tulosta.
Toimittaja Se edustaa tulosten toimittajaa.
ToDoubleBiFunction Se edustaa funktiota, joka hyväksyy kaksi argumenttia ja tuottaa kaksoistyypin tuloksen.
ToDoubleFunction Se edustaa funktiota, joka palauttaa kaksoistyypin tuloksen.
ToIntBiFunction Se edustaa funktiota, joka hyväksyy kaksi argumenttia ja palauttaa kokonaisluvun.
ToIntFunction Se edustaa funktiota, joka palauttaa kokonaisluvun.
ToLongBiFunction Se edustaa funktiota, joka hyväksyy kaksi argumenttia ja palauttaa pitkän tyypin tuloksen.
ToLongFunction Se edustaa funktiota, joka palauttaa pitkän tyypin tuloksen.
UnaryOperator Se edustaa yhden operandin toimintoa, joka palauttaa samantyyppisen tuloksen kuin sen operandi.