¿Cuál es la interfaz funcional de Java 8 para un método que no toma nada y no devuelve nada?
Es decir, ¿el equivalente a C # sin parámetros Action
con void
tipo de retorno?
¿Cuál es la interfaz funcional de Java 8 para un método que no toma nada y no devuelve nada?
Es decir, ¿el equivalente a C # sin parámetros Action
con void
tipo de retorno?
Respuestas:
Si entiendo correctamente, desea una interfaz funcional con un método void m()
. En cuyo caso, simplemente puede usar un Runnable
.
Runnable
está anotado con @FunctionalInterface
y (ii) incluso en el contexto de una expresión lambda se ejecutará en un hilo: el hilo en el que se ejecuta el lambda que puede ser el hilo actual ...
Runnable
estaba destinado a ser utilizado para este propósito, no solo para contextos de hilos.
Solo haz el tuyo
@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();
};
}
}
y úsalo así
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();
}
y la salida
HelloWorld
WorldHello
@FunctionalInterface solo permite el método método abstracto Por lo tanto, puede crear una instancia de esa interfaz con la expresión lambda como se muestra a continuación y puede acceder a los miembros de la interfaz
@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 especificación de la interfaz indica que debe proporcionar código ejecutable a laThread
clase. No me parece correcto usarloRunnable
donde no está destinado a ser ejecutado por un hilo; parece engañoso.Runnable
se define como aFunctionalInterface
porque cumple con la especificación de una interfaz funcional y se puede crear utilizando la sintaxis lambda. ¿Por qué no crear su propia interfaz funcional? ver Runnable , ver FunctionalInterface