default
) à toutes ces méthodes.@FunctionalInterface
" pour être explicite sur le fait qu'il s'agit d'une interface fonctionnelle.
Par défaut, les interfaces qui déclarent une seule méthode abstraite, sont considérées des interfaces fonctionnelles.java.util.function.Predicate
java.util.function
":Predicate<T>: boolean test(T t)
boolean test(T t)
"
qui declare un seul paramètre ("t" de type "T") et retourne vrais/faux.
L'implementation doit, typiquement, appliquer une logique autour de la valeur de l'argument "t".IntPredicate: boolean test(int t)
LongPredicate: boolean test(long t)
DoublePredicate: boolean test(double t)
BiPredicate<T, U>: boolean test(T t, U u)
boolean test(T t, U u)
"
qui declare deux paramètres ("t" de type "T", "u" de type "U") et retourne vrais/faux.
L'implementation doit, typiquement, appliquer une logique autour de la valeur des arguments "t" et "u".Consumer<T>: void accept(T t)
void accept(T t)
"
qui declare un seul paramètre ("t" de type "T") et ne retourne pas de valeur.
L'implementation doit, typiquement, consommer la valeur de l'argument "t" et produit un effet de bord sans retourner de valeur.IntConsumer: void accept(int t)
LongConsumer: void accept(long t)
DoubleConsumer: void accept(double t)
BiConsumer<T, U>: void accept(T t, U u)
void accept(T t, U u)
"
qui declare deux paramètres ("t" de type "T", "u" de type "U") et ne retourne pas de valeur.
L'implementation doit, typiquement, consommer les valeurs des arguments "t" et "u" et produit un effet de bord sans retourner de valeur.ObjIntConsumer<T>: void accept(T t, int u)
ObjLongConsumer<T>: void accept(T t, long u)
ObjDoubleConsumer<T>: void accept(T t, double u)
Supplier<T>: T get()
T get()
" qui ne declare aucun paramètre et l'implementation doit fournir une valuer de type "T".BooleanSupplier: boolean getAsBoolean()
IntSupplier: int getAsInt()
LongSupplier: long getAsLong()
DoubleSupplier: double getAsDouble()
Function<T, R>: R apply(T t)
R apply(T t)
"
qui declare un seul paramètre ("t" de type "T") et retourne une valeur de type "R".
L'implementation doit, typiquement, appliquer une logique autour de la valeur de l'argument "t".IntFunction<R>: R apply(int t)
LongFunction<R>: R apply(long t)
DoubleFunction<R>: R apply(double t)
ToIntFunction<T>: int applyAsInt(T t)
ToLongFunction<T>: long applyAsLong(T t)
ToDoubleFunction<T>: double applyAsDouble(T t)
IntToLongFunction: long applyAsLong(int t)
IntToDoubleFunction: double applyAsDouble(int t)
LongToIntFunction: int applyAsInt(long t)
LongToDoubleFunction: double applyAsDouble(long t)
DoubleToIntFunction: int applyAsInt(double t)
DoubleToLongFunction: long applyAsLong(double t)
BiFunction<T, U, R>: R apply(T t, U u)
R apply(T t, U u)
"
qui declare deux paramètres ("t" de type "T", "u" de type "U") et retourne une valeur de type "R".
L'implementation doit, typiquement, appliquer une logique autour de la valeur des arguments "t" et "u".ToIntBiFunction<T, U>: int applyAsInt(T t, U u)
ToLongBiFunction<T, U>: long applyAsLong(T t, U u)
ToDoubleBiFunction<T, U>: double applyAsDouble(T t, U u)
UnaryOperator<T> extends Function<T, T>: T apply(T t)
IntUnaryOperator: int applyAsInt(int t)
LongUnaryOperator: long applyAsLong(long t)
DoubleUnaryOperator: double applyAsDouble(double t)
BinaryOperator<T> extends BiFunction<T, T, T>: T apply(T t, T u)
IntBinaryOperator: int applyAsInt(int t, int u)
LongBinaryOperator: long applyAsLong(long t, long u)
DoubleBinaryOperator: double applyAsDouble(double t, double u)
MyFunctionalInterface foo(FunctionalInterface myFunctionalInterface) { ... }
MyType::MyStaticMethod
myInstance::MyInstanceMethod
MyType::MyInstanceMethod
MyType
" :String::toUpperCase
" (s -> s.toUpperCase) implique que
l’interface fonctionnelle est de type "Function<String, String>
".TestFunctionalInterface::toUpperCase
" (t -> t.toUpperCase) implique
que l’interface fonctionnelle est de type "Function<TestFunctionalInterface, String>
".MyType::new
(t -> t)