Quelle est l'interface fonctionnelle Java 8 pour une méthode qui ne prend rien et ne renvoie rien?
Ie, l'équivalent du C # sans paramètre Action
avec le void
type de retour?
Quelle est l'interface fonctionnelle Java 8 pour une méthode qui ne prend rien et ne renvoie rien?
Ie, l'équivalent du C # sans paramètre Action
avec le void
type de retour?
Réponses:
Si je comprends bien, vous voulez une interface fonctionnelle avec une méthode void m()
. Dans ce cas, vous pouvez simplement utiliser un fichier Runnable
.
Runnable
est annoté avec @FunctionalInterface
et (ii) même dans le contexte d'une expression lambda il sera exécuté sur un thread: le thread dans lequel le lambda est exécuté qui peut être le thread courant ...
Runnable
était destinée à être utilisée à cette fin, pas seulement pour les contextes de thread.
Faites le vôtre
@FunctionalInterface
public interface Procedure {
void run();
default Procedure andThen(Procedure after){
return () -> {
this.run();
after.run();
};
}
default Procedure compose(Procedure before){
return () -> {
before.run();
this.run();
};
}
}
et utilisez-le comme ça
public static void main(String[] args){
Procedure procedure1 = () -> System.out.print("Hello");
Procedure procedure2 = () -> System.out.print("World");
procedure1.andThen(procedure2).run();
System.out.println();
procedure1.compose(procedure2).run();
}
et la sortie
HelloWorld
WorldHello
@FunctionalInterface autorise uniquement la méthode abstraite de la méthode Par conséquent, vous pouvez instancier cette interface avec l'expression lambda comme ci-dessous et vous pouvez accéder aux membres de l'interface
@FunctionalInterface
interface Hai {
void m2();
static void m1() {
System.out.println("i m1 method:::");
}
default void log(String str) {
System.out.println("i am log method:::" + str);
}
}
public class Hello {
public static void main(String[] args) {
Hai hai = () -> {};
hai.log("lets do it.");
Hai.m1();
}
}
output:
i am log method:::lets do it.
i m1 method:::
Runnable
La spécification de l'interface indique qu'il s'agit de fournir un code exécutable à laThread
classe. Il ne me semble pas juste de l'utiliserRunnable
là où il n'est pas destiné à être exécuté par un thread; semble trompeur.Runnable
est défini comme aFunctionalInterface
car il répond à la spécification d'une interface fonctionnelle et peut être créé à l'aide de la syntaxe lambda. Pourquoi ne pas créer votre propre interface fonctionnelle? voir Runnable , voir FunctionalInterface