logo

Interfaces fonctionnelles Java

Une interface qui contient exactement une méthode abstraite est appelée interface fonctionnelle. Il peut avoir n’importe quel nombre de méthodes statiques par défaut, mais ne peut contenir qu’une seule méthode abstraite. Il peut également déclarer des méthodes de classe d'objet.

L'interface fonctionnelle est également connue sous le nom d'interfaces de méthode abstraite unique ou d'interfaces SAM. Il s'agit d'une nouvelle fonctionnalité de Java, qui permet d'atteindre une approche de programmation fonctionnelle.


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'); } } 
Testez-le maintenant

Sortir:

 Hello there 

Une interface fonctionnelle peut avoir des méthodes de classe d'objet. Voir dans l'exemple suivant.

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'); } } 
Testez-le maintenant

Sortir:

 Hello there 

Interface fonctionnelle invalide

Une interface fonctionnelle ne peut étendre une autre interface que lorsqu'elle ne possède aucune méthode abstraite.

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

Sortir:

 compile-time error 

Exemple 3

Dans l’exemple suivant, une interface fonctionnelle s’étend à une interface non fonctionnelle.

 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(); } } 
Testez-le maintenant

Sortir:

différence entre un tableau et une liste de tableaux
 Hello there Do it now 

Interfaces fonctionnelles prédéfinies Java

Java fournit des interfaces fonctionnelles prédéfinies pour gérer la programmation fonctionnelle en utilisant des références lambda et de méthode.

Vous pouvez également définir votre propre interface fonctionnelle personnalisée. Voici la liste des interfaces fonctionnelles placées dans le package java.util.function.


Interface Description
BiConsommation Il représente une opération qui accepte deux arguments d'entrée et ne renvoie aucun résultat.
Consommateur Il représente une opération qui accepte un seul argument et ne renvoie aucun résultat.
Fonction Il représente une fonction qui accepte un argument et renvoie un résultat.
Prédicat Il représente un prédicat (fonction à valeur booléenne) d'un argument.
BiFonction Il représente une fonction qui accepte deux arguments et renvoie un résultat.
Opérateur Binaire Il représente une opération sur deux opérandes du même type de données. Il renvoie un résultat du même type que les opérandes.
BiPrédicat Il représente un prédicat (fonction à valeur booléenne) de deux arguments.
BooléenFournisseur Il représente un fournisseur de résultats à valeur booléenne.
Opérateur DoubleBinary Il représente une opération sur deux opérandes de type double et renvoie une valeur de type double.
DoubleConsommation Il représente une opération qui accepte un seul argument de type double et ne renvoie aucun résultat.
DoubleFonction Il représente une fonction qui accepte un argument de type double et produit un résultat.
DoublePrédicat Il représente un prédicat (fonction à valeur booléenne) d'un argument de type double.
DoubleFournisseur Il représente un fournisseur de résultats de type double.
DoubleToIntFunction Il représente une fonction qui accepte un argument de type double et produit un résultat de type int.
DoubleToLongFonction Il représente une fonction qui accepte un argument de type double et produit un résultat de type long.
Opérateur DoubleUnaire Il représente une opération sur un seul opérande de type double qui produit un résultat de type double.
Opérateur IntBinaire Il représente une opération sur deux opérandes de type int et renvoie un résultat de type int.
IntConsommateur Il représente une opération qui accepte un seul argument entier et ne renvoie aucun résultat.
IntFonction Il représente une fonction qui accepte un argument entier et renvoie un résultat.
IntPrédicat Il représente un prédicat (fonction à valeur booléenne) d'un argument entier.
Fournisseur international Il représente un fournisseur de type entier.
IntVersDoubleFonction Il représente une fonction qui accepte un argument entier et renvoie un double.
Fonction IntVersLong Il représente une fonction qui accepte un argument entier et renvoie un argument long.
Opérateur IntUnaire Il représente une opération sur un seul opérande entier qui produit un résultat entier.
Opérateur LongBinary Il représente une opération sur deux opérandes de type long et renvoie un résultat de type long.
Consommateur long Il représente une opération qui accepte un seul argument de type long et ne renvoie aucun résultat.
Fonction longue Il représente une fonction qui accepte un argument de type long et renvoie un résultat.
Prédicat Long Il représente un prédicat (fonction à valeur booléenne) d'un argument de type long.
Fournisseur long Il représente un fournisseur de résultats de type long.
Fonction LongVersDouble Il représente une fonction qui accepte un argument de type long et renvoie un résultat de type double.
Fonction LongVersInt Il représente une fonction qui accepte un argument de type long et renvoie un résultat entier.
Opérateur LongUnaire Il représente une opération sur un seul opérande de type long qui renvoie un résultat de type long.
ObjDoubleConsumer Il représente une opération qui accepte un objet et un double argument et ne renvoie aucun résultat.
ObjIntConsommateur Il représente une opération qui accepte un objet et un argument entier. Il ne renvoie pas de résultat.
ObjLongConsommateur Il représente une opération qui accepte un objet et un argument long, il ne renvoie aucun résultat.
Fournisseur Il représente un fournisseur de résultats.
ÀDoubleBiFonction Il représente une fonction qui accepte deux arguments et produit un résultat de type double.
ÀDoubleFonction Il représente une fonction qui renvoie un résultat de type double.
ToIntBiFonction Il représente une fonction qui accepte deux arguments et renvoie un entier.
ToIntFunction Il représente une fonction qui renvoie un entier.
ToLongBiFonction Il représente une fonction qui accepte deux arguments et renvoie un résultat de type long.
ToLongFonction Il représente une fonction qui renvoie un résultat de type long.
Opérateur unaire Il représente une opération sur un seul opérande qui renvoie un résultat du même type que son opérande.