Vmesnik, ki vsebuje točno eno abstraktno metodo, je znan kot funkcionalni vmesnik. Ima lahko poljubno število privzetih statičnih metod, vendar lahko vsebuje samo eno abstraktno metodo. Lahko tudi deklarira metode objektnega razreda.
Funkcionalni vmesnik je znan tudi kot vmesniki ene abstraktne metode ali vmesniki SAM. Gre za novo funkcijo v Javi, ki pomaga doseči pristop funkcionalnega programiranja.
Primer 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'); } }Preizkusite zdaj
Izhod:
Hello there
Funkcionalni vmesnik ima lahko metode razreda objektov. Glejte v naslednjem primeru.
Primer 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'); } }Preizkusite zdaj
Izhod:
Hello there
Neveljaven funkcionalni vmesnik
Funkcionalni vmesnik lahko razširi drug vmesnik le, če nima nobene abstraktne metode.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Izhod:
compile-time error
Primer 3
V naslednjem primeru se funkcionalni vmesnik razširi na nefunkcionalni vmesnik.
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(); } }Preizkusite zdaj
Izhod:
Hello there Do it now
Vnaprej določeni funkcionalni vmesniki Java
Java nudi vnaprej določene funkcionalne vmesnike za obravnavo funkcionalnega programiranja z uporabo lambda in referenc metod.
Določite lahko tudi svoj funkcionalni vmesnik po meri. Sledi seznam funkcionalnih vmesnikov, ki so v paketu java.util.function.
Vmesnik | Opis |
---|---|
BiConsumer | Predstavlja operacijo, ki sprejme dva vhodna argumenta in ne vrne nobenega rezultata. |
Potrošnik | Predstavlja operacijo, ki sprejme en sam argument in ne vrne nobenega rezultata. |
funkcija | Predstavlja funkcijo, ki sprejme en argument in vrne rezultat. |
Predikat | Predstavlja predikat (funkcijo z logično vrednostjo) enega argumenta. |
BiFunction | Predstavlja funkcijo, ki sprejme dva argumenta in vrne rezultat. |
BinaryOperator | Predstavlja operacijo nad dvema operandoma istega podatkovnega tipa. Vrne rezultat istega tipa kot operandi. |
Bipredikat | Predstavlja predikat (funkcija z logično vrednostjo) dveh argumentov. |
BooleanSupplier | Predstavlja dobavitelja rezultatov z logičnimi vrednostmi. |
DoubleBinaryOperator | Predstavlja operacijo na dveh operandih dvojnega tipa in vrne vrednost dvojnega tipa. |
DoubleConsumer | Predstavlja operacijo, ki sprejme en sam argument dvojnega tipa in ne vrne nobenega rezultata. |
DoubleFunction | Predstavlja funkcijo, ki sprejme argument dvojnega tipa in ustvari rezultat. |
DoublePredicate | Predstavlja predikat (funkcija z logično vrednostjo) enega argumenta dvojnega tipa. |
DoubleSupplier | Predstavlja ponudnika rezultatov dvojnega tipa. |
DoubleToIntFunction | Predstavlja funkcijo, ki sprejme argument dvojnega tipa in ustvari rezultat tipa int. |
DoubleToLongFunction | Predstavlja funkcijo, ki sprejme argument dvojnega tipa in ustvari rezultat dolgega tipa. |
DoubleUnaryOperator | Predstavlja operacijo na enem operandu dvojnega tipa, ki proizvede rezultat dvojnega tipa. |
IntBinaryOperator | Predstavlja operacijo nad dvema operandoma tipa int in vrne rezultat tipa int. |
IntConsumer | Predstavlja operacijo, ki sprejme en celoštevilski argument in ne vrne nobenega rezultata. |
IntFunction | Predstavlja funkcijo, ki sprejme celoštevilski argument in vrne rezultat. |
IntPredicate | Predstavlja predikat (funkcijo z logično vrednostjo) enega celega argumenta. |
IntSupplier | Predstavlja dobavitelja celega tipa. |
IntToDoubleFunction | Predstavlja funkcijo, ki sprejme celoštevilski argument in vrne dvojno. |
IntToLongFunction | Predstavlja funkcijo, ki sprejme celoštevilski argument in vrne dolgo. |
IntUnaryOperator | Predstavlja operacijo na enem celem operandu, ki proizvede celoštevilski rezultat. |
LongBinaryOperator | Predstavlja operacijo na dveh operandih dolgega tipa in vrne rezultat dolgega tipa. |
LongConsumer | Predstavlja operacijo, ki sprejme en argument dolgega tipa in ne vrne nobenega rezultata. |
LongFunction | Predstavlja funkcijo, ki sprejme argument dolgega tipa in vrne rezultat. |
Dolgi predikat | Predstavlja predikat (funkcija z logično vrednostjo) enega argumenta dolgega tipa. |
LongSupplier | Predstavlja dobavitelja rezultatov dolgega tipa. |
LongToDoubleFunction | Predstavlja funkcijo, ki sprejme argument dolgega tipa in vrne rezultat dvojnega tipa. |
LongToIntFunction | Predstavlja funkcijo, ki sprejme argument dolgega tipa in vrne celoštevilski rezultat. |
LongUnaryOperator | Predstavlja operacijo na enem operandu dolgega tipa, ki vrne rezultat dolgega tipa. |
ObjDoubleConsumer | Predstavlja operacijo, ki sprejme objekt in dvojni argument in ne vrne nobenega rezultata. |
ObjIntConsumer | Predstavlja operacijo, ki sprejme objekt in celoštevilski argument. Ne vrne rezultata. |
ObjLongConsumer | Predstavlja operacijo, ki sprejme objekt in dolg argument, ne vrne nobenega rezultata. |
Dobavitelj | Predstavlja ponudnika rezultatov. |
ToDoubleBiFunction | Predstavlja funkcijo, ki sprejme dva argumenta in ustvari rezultat dvojnega tipa. |
ToDoubleFunction | Predstavlja funkcijo, ki vrne rezultat dvojnega tipa. |
ToIntBiFunction | Predstavlja funkcijo, ki sprejme dva argumenta in vrne celo število. |
ToIntFunction | Predstavlja funkcijo, ki vrne celo število. |
ToLongBiFunction | Predstavlja funkcijo, ki sprejme dva argumenta in vrne rezultat dolgega tipa. |
ToLongFunction | Predstavlja funkcijo, ki vrne rezultat dolgega tipa. |
UnaryOperator | Predstavlja operacijo na enem operandu, ki vrne rezultat istega tipa kot njegov operand. |