logo

Interfícies funcionals de Java

Una interfície que conté exactament un mètode abstracte es coneix com a interfície funcional. Pot tenir qualsevol nombre de mètodes estàtics per defecte, però només pot contenir un mètode abstracte. També pot declarar mètodes de classe d'objectes.

La interfície funcional també es coneix com a interfícies de mètode abstracte únic o interfícies SAM. És una característica nova de Java, que ajuda a aconseguir un enfocament de programació funcional.


Exemple 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'); } } 
Prova-ho ara

Sortida:

 Hello there 

Una interfície funcional pot tenir mètodes de classe d'objecte. Vegeu a l'exemple següent.

Exemple 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'); } } 
Prova-ho ara

Sortida:

 Hello there 

Interfície funcional no vàlida

Una interfície funcional només pot ampliar una altra interfície quan no té cap mètode abstracte.

 interface sayable{ void say(String msg); // abstract method } @FunctionalInterface interface Doable extends sayable{ // Invalid '@FunctionalInterface' annotation; Doable is not a functional interface void doIt(); } 

Sortida:

 compile-time error 

Exemple 3

En l'exemple següent, una interfície funcional s'estén a una interfície no funcional.

 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(); } } 
Prova-ho ara

Sortida:

 Hello there Do it now 

Interfícies funcionals predefinides de Java

Java proporciona interfícies funcionals predefinides per fer front a la programació funcional mitjançant referències lambda i mètodes.

També podeu definir la vostra pròpia interfície funcional personalitzada. A continuació es mostra la llista d'interfícies funcionals que es col·loquen al paquet java.util.function.


Interfície Descripció
Biconsumidor Representa una operació que accepta dos arguments d'entrada i no retorna cap resultat.
Consumidor Representa una operació que accepta un sol argument i no retorna cap resultat.
Funció Representa una funció que accepta un argument i retorna un resultat.
Predicat Representa un predicat (funció amb valors booleans) d'un argument.
Bifunció Representa una funció que accepta dos arguments i retorna un resultat.
Operador binari Representa una operació sobre dos operands del mateix tipus de dades. Retorna un resultat del mateix tipus que els operands.
BiPredicat Representa un predicat (funció amb valors booleans) de dos arguments.
BooleanSupplier Representa un proveïdor de resultats amb valors booleans.
DoubleBinaryOperator Representa una operació sobre dos operands de tipus doble i retorna un valor de tipus doble.
DoubleConsumer Representa una operació que accepta un únic argument de tipus doble i no retorna cap resultat.
DoubleFunction Representa una funció que accepta un argument de tipus doble i produeix un resultat.
Doble predicat Representa un predicat (funció amb valors booleans) d'un argument de tipus doble.
DobleProveïdor Representa un proveïdor de resultats de tipus doble.
DoubleToIntFunction Representa una funció que accepta un argument de tipus doble i produeix un resultat de tipus int.
DoubleToLongFunction Representa una funció que accepta un argument de tipus doble i produeix un resultat de tipus llarg.
DoubleUnaryOperator Representa una operació sobre un únic operand de tipus doble que produeix un resultat de tipus doble.
IntBinaryOperator Representa una operació sobre dos operands de tipus int i retorna un resultat de tipus int.
IntConsumer Representa una operació que accepta un sol argument enter i no retorna cap resultat.
IntFunction Representa una funció que accepta un argument enter i retorna un resultat.
IntPredicate Representa un predicat (funció amb valors booleans) d'un argument enter.
IntProveïdor Representa un proveïdor de tipus enter.
IntToDoubleFunction Representa una funció que accepta un argument enter i retorna un doble.
IntToLongFunction Representa una funció que accepta un argument enter i retorna un llarg.
IntUnaryOperator Representa una operació sobre un únic operand enter que produeix un resultat enter.
LongBinaryOperator Representa una operació sobre dos operands de tipus llarg i retorna un resultat de tipus llarg.
LongConsumer Representa una operació que accepta un sol argument de tipus llarg i no retorna cap resultat.
Funció llarga Representa una funció que accepta un argument de tipus llarg i retorna un resultat.
Predicat llarg Representa un predicat (funció amb valors booleans) d'un argument de tipus llarg.
Proveïdor llarg Representa un proveïdor de resultats de tipus llarg.
LongToDoubleFunction Representa una funció que accepta un argument de tipus llarg i retorna un resultat de tipus doble.
LongToIntFunction Representa una funció que accepta un argument de tipus llarg i retorna un resultat sencer.
LongUnaryOperator Representa una operació sobre un únic operand de tipus llarg que retorna un resultat de tipus llarg.
ObjDoubleConsumer Representa una operació que accepta un objecte i un argument doble i no retorna cap resultat.
ObjIntConsumer Representa una operació que accepta un objecte i un argument enter. No retorna resultat.
ObjLongConsumer Representa una operació que accepta un objecte i un argument llarg, no retorna cap resultat.
Proveïdor Representa un proveïdor de resultats.
ToDoubleBiFunction Representa una funció que accepta dos arguments i produeix un resultat de tipus doble.
ToDoubleFunction Representa una funció que retorna un resultat de tipus doble.
ToIntBiFunction Representa una funció que accepta dos arguments i retorna un nombre enter.
ToIntFunction Representa una funció que retorna un nombre enter.
ToLongBiFunction Representa una funció que accepta dos arguments i retorna un resultat de tipus llarg.
ToLongFunction Representa una funció que retorna un resultat de tipus llarg.
Operador unari Representa una operació sobre un únic operand que retorna un resultat del mateix tipus que el seu operand.