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. |