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. |