Eine Schnittstelle, die genau eine abstrakte Methode enthält, wird als funktionale Schnittstelle bezeichnet. Es kann eine beliebige Anzahl statischer Standardmethoden haben, aber nur eine abstrakte Methode. Es können auch Methoden der Objektklasse deklariert werden.
Die funktionale Schnittstelle wird auch als Single Abstract Method Interfaces oder SAM Interfaces bezeichnet. Es handelt sich um eine neue Funktion in Java, die dabei hilft, einen funktionalen Programmieransatz zu erreichen.
Git-Status
Beispiel 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'); } }Testen Sie es jetzt
Ausgabe:
Hello there
Eine funktionale Schnittstelle kann Methoden der Objektklasse haben. Siehe im folgenden Beispiel.
Generizität in Java
Beispiel 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'); } }Testen Sie es jetzt
Ausgabe:
Hello there
Ungültige funktionale Schnittstelle
Eine funktionale Schnittstelle kann eine andere Schnittstelle nur dann erweitern, wenn sie über keine abstrakte Methode verfügt.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Ausgabe:
compile-time error
Beispiel 3
Im folgenden Beispiel wird eine funktionale Schnittstelle auf eine nicht funktionale Schnittstelle erweitert.
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(); } }Testen Sie es jetzt
Ausgabe:
Linux-Befehl für zip
Hello there Do it now
Java vordefinierte funktionale Schnittstellen
Java bietet vordefinierte funktionale Schnittstellen für die funktionale Programmierung mithilfe von Lambda- und Methodenreferenzen.
Sie können auch Ihre eigene benutzerdefinierte Funktionsschnittstelle definieren. Im Folgenden finden Sie eine Liste der Funktionsschnittstellen, die im Paket java.util.function abgelegt sind.
Schnittstelle | Beschreibung |
---|---|
BiConsumer | Es stellt eine Operation dar, die zwei Eingabeargumente akzeptiert und kein Ergebnis zurückgibt. |
Verbraucher | Es stellt eine Operation dar, die ein einzelnes Argument akzeptiert und kein Ergebnis zurückgibt. |
Funktion | Es stellt eine Funktion dar, die ein Argument akzeptiert und ein Ergebnis zurückgibt. |
Prädikat | Es stellt ein Prädikat (boolesche Funktion) eines Arguments dar. |
BiFunktion | Es stellt eine Funktion dar, die zwei Argumente akzeptiert und ein Ergebnis zurückgibt. |
BinärOperator | Es stellt eine Operation an zwei Operanden desselben Datentyps dar. Es gibt ein Ergebnis desselben Typs wie die Operanden zurück. |
BiPredicate | Es stellt ein Prädikat (boolesche Funktion) aus zwei Argumenten dar. |
BooleanSupplier | Es stellt einen Lieferanten boolescher Ergebnisse dar. |
DoubleBinaryOperator | Es stellt eine Operation an zwei Operanden vom Typ Double dar und gibt einen Wert vom Typ Double zurück. |
DoubleConsumer | Es stellt eine Operation dar, die ein einzelnes Argument vom Typ Double akzeptiert und kein Ergebnis zurückgibt. |
DoubleFunction | Es stellt eine Funktion dar, die ein Argument vom Typ Double akzeptiert und ein Ergebnis erzeugt. |
DoublePredicate | Es stellt ein Prädikat (boolesche Funktion) eines Arguments vom Typ Double dar. |
DoubleSupplier | Es handelt sich um einen Anbieter von Ergebnissen doppelter Art. |
DoubleToIntFunction | Es stellt eine Funktion dar, die ein Argument vom Typ Double akzeptiert und ein Ergebnis vom Typ int erzeugt. |
DoubleToLongFunction | Es stellt eine Funktion dar, die ein Argument vom Typ Double akzeptiert und ein Ergebnis vom Typ Long erzeugt. |
DoubleUnaryOperator | Es stellt eine Operation an einem einzelnen Operanden vom Typ „Double“ dar, die ein Ergebnis vom Typ „Double“ erzeugt. |
IntBinaryOperator | Es stellt eine Operation für zwei Operanden vom Typ int dar und gibt ein Ergebnis vom Typ int zurück. |
IntConsumer | Es stellt eine Operation dar, die ein einzelnes ganzzahliges Argument akzeptiert und kein Ergebnis zurückgibt. |
IntFunction | Es stellt eine Funktion dar, die ein ganzzahliges Argument akzeptiert und ein Ergebnis zurückgibt. |
IntPredicate | Es stellt ein Prädikat (boolesche Funktion) eines ganzzahligen Arguments dar. |
IntSupplier | Es stellt einen Lieferanten vom Typ Integer dar. |
IntToDoubleFunction | Es stellt eine Funktion dar, die ein ganzzahliges Argument akzeptiert und ein Double zurückgibt. |
IntToLongFunction | Es stellt eine Funktion dar, die ein ganzzahliges Argument akzeptiert und einen langen Wert zurückgibt. |
IntUnaryOperator | Es stellt eine Operation an einem einzelnen ganzzahligen Operanden dar, die ein ganzzahliges Ergebnis erzeugt. |
LongBinaryOperator | Es stellt eine Operation für zwei Operanden vom Typ „Lang“ dar und gibt ein Ergebnis vom Typ „Lang“ zurück. |
LongConsumer | Es stellt eine Operation dar, die ein einzelnes langes Argument akzeptiert und kein Ergebnis zurückgibt. |
LongFunction | Es stellt eine Funktion dar, die ein langes Argument akzeptiert und ein Ergebnis zurückgibt. |
LongPredicate | Es stellt ein Prädikat (boolesche Funktion) eines langen Argumenttyps dar. |
LongSupplier | Es stellt einen Anbieter von Langzeitergebnissen dar. |
LongToDoubleFunction | Es stellt eine Funktion dar, die ein Argument vom Typ „Long“ akzeptiert und ein Ergebnis vom Typ „Double“ zurückgibt. |
LongToIntFunction | Es stellt eine Funktion dar, die ein langes Argument akzeptiert und ein ganzzahliges Ergebnis zurückgibt. |
LongUnaryOperator | Es stellt eine Operation an einem einzelnen Operanden vom Typ „Lang“ dar, die ein Ergebnis vom Typ „Lang“ zurückgibt. |
ObjDoubleConsumer | Es stellt eine Operation dar, die ein Objekt und ein doppeltes Argument akzeptiert und kein Ergebnis zurückgibt. |
ObjIntConsumer | Es stellt eine Operation dar, die ein Objekt und ein ganzzahliges Argument akzeptiert. Es wird kein Ergebnis zurückgegeben. |
ObjLongConsumer | Es stellt eine Operation dar, die ein Objekt und ein langes Argument akzeptiert und kein Ergebnis zurückgibt. |
Anbieter | Es stellt einen Ergebnislieferanten dar. |
ToDoubleBiFunction | Es stellt eine Funktion dar, die zwei Argumente akzeptiert und ein Ergebnis vom Typ Double erzeugt. |
ToDoubleFunction | Es stellt eine Funktion dar, die ein Ergebnis vom Typ Double zurückgibt. |
ToIntBiFunction | Es stellt eine Funktion dar, die zwei Argumente akzeptiert und eine Ganzzahl zurückgibt. |
ToIntFunction | Es stellt eine Funktion dar, die eine Ganzzahl zurückgibt. |
ToLongBiFunction | Es stellt eine Funktion dar, die zwei Argumente akzeptiert und ein Ergebnis vom Typ „long“ zurückgibt. |
ToLongFunction | Es stellt eine Funktion dar, die ein Ergebnis vom Typ „long“ zurückgibt. |
UnaryOperator | Es stellt eine Operation an einem einzelnen Operanden dar, die ein Ergebnis desselben Typs wie sein Operand zurückgibt. |