Een interface die precies één abstracte methode bevat, staat bekend als functionele interface. Het kan een willekeurig aantal standaard, statische methoden hebben, maar kan slechts één abstracte methode bevatten. Het kan ook methoden van objectklasse declareren.
Functionele interface wordt ook wel Single Abstract Method Interfaces of SAM-interfaces genoemd. Het is een nieuwe functie in Java, die helpt bij het bereiken van een functionele programmeeraanpak.
voorbeeld 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'); } }Test het nu
Uitgang:
Hello there
Een functionele interface kan methoden van objectklasse hebben. Zie in het volgende voorbeeld.
Voorbeeld 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'); } }Test het nu
Uitgang:
Hello there
Ongeldige functionele interface
Een functionele interface kan alleen een andere interface uitbreiden als deze geen abstracte methode heeft.
interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); }
Uitgang:
compile-time error
Voorbeeld 3
In het volgende voorbeeld breidt een functionele interface zich uit naar een niet-functionele interface.
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(); } }Test het nu
Uitgang:
Hello there Do it now
Java vooraf gedefinieerde functionele interfaces
Java biedt vooraf gedefinieerde functionele interfaces voor functioneel programmeren door gebruik te maken van lambda- en methodereferenties.
U kunt ook uw eigen aangepaste functionele interface definiëren. Hieronder volgt de lijst met functionele interfaces die in het java.util.function-pakket zijn geplaatst.
Koppel | Beschrijving |
---|---|
BiConsument | Het vertegenwoordigt een bewerking die twee invoerargumenten accepteert en geen resultaat retourneert. |
Klant | Het vertegenwoordigt een bewerking die één enkel argument accepteert en geen resultaat retourneert. |
Functie | Het vertegenwoordigt een functie die één argument accepteert en een resultaat retourneert. |
Predikaat | Het vertegenwoordigt een predikaat (functie met Booleaanse waarde) van één argument. |
BiFunctie | Het vertegenwoordigt een functie die twee argumenten accepteert en een resultaat retourneert. |
BinaireOperator | Het vertegenwoordigt een bewerking op twee operanden van hetzelfde gegevenstype. Het retourneert een resultaat van hetzelfde type als de operanden. |
BiPredicaat | Het vertegenwoordigt een predikaat (functie met Booleaanse waarden) van twee argumenten. |
BooleaanseLeverancier | Het vertegenwoordigt een leverancier van resultaten met Booleaanse waarden. |
DoubleBinaryOperator | Het vertegenwoordigt een bewerking op twee operanden van het dubbele type en retourneert een waarde van het dubbele type. |
DubbelConsument | Het vertegenwoordigt een bewerking die een enkel argument van het dubbele type accepteert en geen resultaat retourneert. |
Dubbele Functie | Het vertegenwoordigt een functie die een argument van het dubbele type accepteert en een resultaat oplevert. |
DubbelPredikaat | Het vertegenwoordigt een predikaat (functie met Booleaanse waarde) van één argument van het dubbele type. |
DubbeleLeverancier | Het vertegenwoordigt een leverancier van dubbele typeresultaten. |
DoubleToIntFunctie | Het vertegenwoordigt een functie die een dubbel type-argument accepteert en een int-type resultaat oplevert. |
DoubleToLongFunctie | Het vertegenwoordigt een functie die een dubbel type-argument accepteert en een lang type-resultaat oplevert. |
DoubleUnaryOperator | Het vertegenwoordigt een bewerking op een enkele operand van het dubbele type die een resultaat van het dubbele type oplevert. |
IntBinaryOperator | Het vertegenwoordigt een bewerking op twee operanden van het int-type en retourneert een resultaat van het int-type. |
IntConsument | Het vertegenwoordigt een bewerking die één enkel geheel getal-argument accepteert en geen resultaat retourneert. |
IntFunctie | Het vertegenwoordigt een functie die een geheel getal-argument accepteert en een resultaat retourneert. |
IntPredicaat | Het vertegenwoordigt een predikaat (functie met Booleaanse waarde) van één geheel getalargument. |
IntLeverancier | Het vertegenwoordigt een leverancier van het gehele type. |
IntToDoubleFunctie | Het vertegenwoordigt een functie die een geheel getal-argument accepteert en een double retourneert. |
IntToLongFunctie | Het vertegenwoordigt een functie die een geheel getal-argument accepteert en een long retourneert. |
IntUnaryOperator | Het vertegenwoordigt een bewerking op een enkele integer-operand die een geheel getal-resultaat oplevert. |
LangeBinaireOperator | Het vertegenwoordigt een bewerking op twee lange type operanden en retourneert een lang type resultaat. |
LangeConsument | Het vertegenwoordigt een bewerking die één enkel lang type-argument accepteert en geen resultaat retourneert. |
Lange Functie | Het vertegenwoordigt een functie die een lang type-argument accepteert en een resultaat retourneert. |
LangPredikaat | Het vertegenwoordigt een predikaat (functie met Booleaanse waarde) van één lang type argument. |
LangLeverancier | Het vertegenwoordigt een leverancier van lange typeresultaten. |
LongToDouble-functie | Het vertegenwoordigt een functie die een lang type-argument accepteert en een resultaat van dubbel type retourneert. |
LongToIntFunctie | Het vertegenwoordigt een functie die een lang type-argument accepteert en een geheel getal resultaat retourneert. |
LongUnaryOperator | Het vertegenwoordigt een bewerking op een enkele lange type operand die een lang type resultaat retourneert. |
ObjDoubleConsument | Het vertegenwoordigt een bewerking die een object en een dubbel argument accepteert en geen resultaat retourneert. |
ObjIntConsument | Het vertegenwoordigt een bewerking die een object en een geheel getal-argument accepteert. Het levert geen resultaat op. |
ObjLongConsument | Het vertegenwoordigt een bewerking die een object en een lang argument accepteert, maar retourneert geen resultaat. |
Leverancier | Het vertegenwoordigt een leverancier van resultaten. |
NaarDoubleBiFunction | Het vertegenwoordigt een functie die twee argumenten accepteert en een dubbel type resultaat oplevert. |
Naar dubbele functie | Het vertegenwoordigt een functie die een dubbel type resultaat retourneert. |
NaarIntBiFunctie | Het vertegenwoordigt een functie die twee argumenten accepteert en een geheel getal retourneert. |
NaarIntFunctie | Het vertegenwoordigt een functie die een geheel getal retourneert. |
ToLongBiFunctie | Het vertegenwoordigt een functie die twee argumenten accepteert en een resultaat van het lange type retourneert. |
NaarLongFunctie | Het vertegenwoordigt een functie die een resultaat van het lange type retourneert. |
UnaireOperator | Het vertegenwoordigt een bewerking op een enkele operand die een resultaat retourneert van hetzelfde type als de operand ervan. |