Sučelje koje sadrži točno jednu apstraktnu metodu poznato je kao funkcionalno sučelje. Može imati bilo koji broj zadanih, statičkih metoda, ali može sadržavati samo jednu apstraktnu metodu. Također može deklarirati metode klase objekata.
Funkcionalno sučelje također je poznato kao sučelja pojedinačne apstraktne metode ili sučelja SAM. To je nova značajka u Javi koja pomaže u postizanju funkcionalnog programskog pristupa.
Primjer 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'); } }Testirajte sada
Izlaz:
Hello there
Funkcionalno sučelje može imati metode klase objekta. Pogledajte u sljedećem primjeru.
Primjer 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'); } }Testirajte sada
Izlaz:
Hello there
Nevažeće funkcionalno sučelje
Funkcionalno sučelje može proširiti drugo sučelje samo ako nema nikakvu apstraktnu metodu.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Izlaz:
compile-time error
Primjer 3
U sljedećem primjeru, funkcionalno sučelje proširuje se na nefunkcionalno sučelje.
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(); } }Testirajte sada
Izlaz:
Hello there Do it now
Java unaprijed definirana funkcionalna sučelja
Java pruža unaprijed definirana funkcionalna sučelja za rad s funkcionalnim programiranjem pomoću lambda i referenci metoda.
Također možete definirati vlastito prilagođeno funkcionalno sučelje. Slijedi popis funkcionalnih sučelja koja su smještena u paketu java.util.function.
Sučelje | Opis |
---|---|
BiPotrošač | Predstavlja operaciju koja prihvaća dva ulazna argumenta i ne vraća nikakav rezultat. |
Potrošač | Predstavlja operaciju koja prihvaća jedan argument i ne vraća nikakav rezultat. |
Funkcija | Predstavlja funkciju koja prihvaća jedan argument i vraća rezultat. |
Predikat | Predstavlja predikat (funkcija s booleovom vrijednosti) jednog argumenta. |
Bifunkcija | Predstavlja funkciju koja prihvaća dva argumenta i vraća rezultat. |
BinarniOperator | Predstavlja operaciju nad dva operanda istog tipa podataka. Vraća rezultat iste vrste kao i operandi. |
Bipredikat | Predstavlja predikat (funkcija s booleovom vrijednosti) dvaju argumenata. |
BooleanSupplier | Predstavlja dobavljača Booleovih rezultata. |
DoubleBinaryOperator | Predstavlja operaciju na dva operanda dvostrukog tipa i vraća vrijednost dvostrukog tipa. |
Dvostruki potrošač | Predstavlja operaciju koja prihvaća jedan dvostruki argument tipa i ne vraća nikakav rezultat. |
DoubleFunction | Predstavlja funkciju koja prihvaća dvostruki tip argumenta i proizvodi rezultat. |
Dvostruki predikat | Predstavlja predikat (funkcija s booleovom vrijednosti) jednog argumenta dvostrukog tipa. |
DoubleSupplier | Predstavlja dobavljača dvostrukih rezultata. |
DoubleToIntFunction | Predstavlja funkciju koja prihvaća dvostruki argument tipa i proizvodi rezultat tipa int. |
DoubleToLongFunction | Predstavlja funkciju koja prihvaća argument dvostrukog tipa i proizvodi rezultat dugog tipa. |
DoubleUnaryOperator | Predstavlja operaciju na jednom operandu dvostrukog tipa koja proizvodi rezultat dvostrukog tipa. |
IntBinaryOperator | Predstavlja operaciju nad dva operanda tipa int i vraća rezultat tipa int. |
IntConsumer | Predstavlja operaciju koja prihvaća jedan argument cijelog broja i ne vraća nikakav rezultat. |
IntFunction | Predstavlja funkciju koja prihvaća argument cijelog broja i vraća rezultat. |
IntPredicate | Predstavlja predikat (funkcija s booleovom vrijednosti) jednog argumenta cijelog broja. |
IntSupplier | Predstavlja dobavljača cjelobrojnog tipa. |
IntToDoubleFunction | Predstavlja funkciju koja prihvaća cjelobrojni argument i vraća double. |
IntToLongFunction | Predstavlja funkciju koja prihvaća argument integer i vraća long. |
IntUnaryOperator | Predstavlja operaciju na jednom cijelobrojnom operandu koja proizvodi cjelobrojni rezultat. |
DugiBinarniOperator | Predstavlja operaciju na dva operanda dugog tipa i vraća rezultat dugog tipa. |
LongConsumer | Predstavlja operaciju koja prihvaća jedan argument dugog tipa i ne vraća nikakav rezultat. |
LongFunction | Predstavlja funkciju koja prihvaća dugi tip argumenta i vraća rezultat. |
Dugi predikat | Predstavlja predikat (funkcija s booleovom vrijednosti) jednog dugog tipa argumenta. |
LongSupplier | Predstavlja dobavljača rezultata dugog tipa. |
LongToDoubleFunction | Predstavlja funkciju koja prihvaća dugi tip argumenta i vraća rezultat dvostrukog tipa. |
LongToIntFunction | Predstavlja funkciju koja prihvaća dugi tip argumenta i vraća cjelobrojni rezultat. |
LongUnaryOperator | Predstavlja operaciju na jednom operandu dugog tipa koji vraća rezultat dugog tipa. |
ObjDoubleConsumer | Predstavlja operaciju koja prihvaća objekt i dvostruki argument, a ne vraća nikakav rezultat. |
ObjIntConsumer | Predstavlja operaciju koja prihvaća objekt i cjelobrojni argument. Ne vraća rezultat. |
ObjLongConsumer | Predstavlja operaciju koja prihvaća objekt i dugi argument, ne vraća nikakav rezultat. |
Dobavljač | Predstavlja dobavljača rezultata. |
ToDoubleBiFunction | Predstavlja funkciju koja prihvaća dva argumenta i proizvodi rezultat dvostrukog tipa. |
ToDoubleFunction | Predstavlja funkciju koja vraća rezultat dvostrukog tipa. |
ToIntBiFunction | Predstavlja funkciju koja prihvaća dva argumenta i vraća cijeli broj. |
ToIntFunction | Predstavlja funkciju koja vraća cijeli broj. |
ToLongBiFunction | Predstavlja funkciju koja prihvaća dva argumenta i vraća rezultat dugog tipa. |
ToLongFunction | Predstavlja funkciju koja vraća rezultat dugog tipa. |
Unarni operator | Predstavlja operaciju na jednom operandu koja vraća rezultat istog tipa kao i njegov operand. |