Ett gränssnitt som innehåller exakt en abstrakt metod kallas funktionellt gränssnitt. Den kan ha valfritt antal förvalda statiska metoder men kan bara innehålla en abstrakt metod. Det kan också deklarera metoder för objektklass.
Funktionellt gränssnitt är också känt som Single Abstract Method Interfaces eller SAM Interfaces. Det är en ny funktion i Java, som hjälper till att uppnå funktionell programmering.
Exempel 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'); } }Testa det nu
Produktion:
Hello there
Ett funktionellt gränssnitt kan ha metoder för objektklass. Se i följande exempel.
Exempel 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'); } }Testa det nu
Produktion:
Hello there
Ogiltigt funktionellt gränssnitt
Ett funktionellt gränssnitt kan utöka ett annat gränssnitt endast när det inte har någon abstrakt metod.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Produktion:
compile-time error
Exempel 3
I följande exempel utökas ett funktionellt gränssnitt till ett icke-funktionellt gränssnitt.
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(); } }Testa det nu
Produktion:
Hello there Do it now
Java fördefinierade-funktionella gränssnitt
Java tillhandahåller fördefinierade funktionella gränssnitt för att hantera funktionell programmering genom att använda lambda- och metodreferenser.
Du kan också definiera ditt eget anpassade funktionella gränssnitt. Följande är listan över funktionella gränssnitt som är placerade i java.util.function-paketet.
Gränssnitt | Beskrivning |
---|---|
BiConsumer | Den representerar en operation som accepterar två inmatningsargument och som inte returnerar något resultat. |
Konsument | Det representerar en operation som accepterar ett enda argument och inte returnerar något resultat. |
Fungera | Den representerar en funktion som accepterar ett argument och returnerar ett resultat. |
Predikat | Det representerar ett predikat (booleskt värderad funktion) av ett argument. |
BiFunction | Den representerar en funktion som accepterar två argument och returnerar ett a-resultat. |
BinaryOperator | Det representerar en operation på två operander av samma datatyp. Det returnerar ett resultat av samma typ som operanderna. |
BiPredikat | Den representerar ett predikat (booleskt värderad funktion) av två argument. |
Boolean Supplier | Det representerar en leverantör av booleskt värderade resultat. |
DoubleBinaryOperator | Det representerar en operation på två dubbeltypsoperander och returnerar ett dubbeltypsvärde. |
DoubleConsumer | Den representerar en operation som accepterar ett enkel dubbeltypsargument och inte returnerar något resultat. |
Dubbelfunktion | Den representerar en funktion som accepterar ett dubbeltypsargument och producerar ett resultat. |
DoublePredicate | Det representerar ett predikat (booleskt värderad funktion) av ett dubbeltypsargument. |
DoubleSupplier | Det representerar en leverantör av dubbeltypsresultat. |
DoubleToIntFunction | Den representerar en funktion som accepterar ett dubbeltypargument och producerar ett resultat av int-typ. |
DoubleToLongFunction | Den representerar en funktion som accepterar ett dubbeltypsargument och ger ett långt typresultat. |
DoubleUnaryOperator | Den representerar en operation på en enkel dubbeltypsoperand som ger ett dubbeltypsresultat. |
IntBinaryOperator | Den representerar en operation på två operander av int-typ och returnerar ett resultat av int-typ. |
IntConsumer | Den representerar en operation som accepterar ett enda heltalsargument och inte returnerar något resultat. |
IntFunction | Den representerar en funktion som accepterar ett heltalsargument och returnerar ett resultat. |
IntPredicate | Det representerar ett predikat (booleskt värderad funktion) av ett heltalsargument. |
IntSupplier | Det representerar en leverantör av heltalstyp. |
IntToDoubleFunction | Den representerar en funktion som accepterar ett heltalsargument och returnerar en dubbel. |
IntToLongFunction | Den representerar en funktion som accepterar ett heltalsargument och returnerar en lång. |
IntUnaryOperator | Den representerar en operation på en enstaka heltalsoperand som ger ett heltalsresultat. |
LongBinaryOperator | Det representerar en operation på två långa typoperander och returnerar ett långt typresultat. |
LongConsumer | Det representerar en operation som accepterar ett enda lång typargument och inte returnerar något resultat. |
Långfunktion | Den representerar en funktion som accepterar ett långt typargument och returnerar ett resultat. |
LongPredicate | Det representerar ett predikat (booleskt värderad funktion) av ett långtypsargument. |
LongSupplier | Det representerar en leverantör av långa resultat. |
LongToDoubleFunction | Den representerar en funktion som accepterar ett långt typargument och returnerar ett resultat av dubbel typ. |
LongToIntFunction | Den representerar en funktion som accepterar ett lång typargument och returnerar ett heltalsresultat. |
LongUnaryOperator | Det representerar en operation på en enda lång typ operand som returnerar ett långt typresultat. |
ObjDoubleConsumer | Den representerar en operation som accepterar ett objekt och ett dubbelargument och inte returnerar något resultat. |
ObjIntConsumer | Det representerar en operation som accepterar ett objekt och ett heltalsargument. Det ger inget resultat. |
ObjLongConsumer | Det representerar en operation som accepterar ett objekt och ett långt argument, det ger inget resultat. |
Leverantör | Den representerar en resultatleverantör. |
ToDoubleBiFunction | Den representerar en funktion som accepterar två argument och ger ett resultat med dubbel typ. |
ToDoubleFunction | Det representerar en funktion som returnerar ett dubbeltypsresultat. |
ToIntBiFunction | Den representerar en funktion som accepterar två argument och returnerar ett heltal. |
ToIntFunction | Den representerar en funktion som returnerar ett heltal. |
ToLongBiFunction | Den representerar en funktion som accepterar två argument och returnerar ett resultat av lång typ. |
ToLongFunction | Den representerar en funktion som returnerar ett resultat av lång typ. |
UnaryOperator | Den representerar en operation på en enskild operand som returnerar ett resultat av samma typ som dess operand. |