Qual é a interface funcional do Java 8 para um método que não leva nada e não retorna nada?
Ou seja, o equivalente ao C # sem parâmetros Action
com void
tipo de retorno?
Qual é a interface funcional do Java 8 para um método que não leva nada e não retorna nada?
Ou seja, o equivalente ao C # sem parâmetros Action
com void
tipo de retorno?
Respostas:
Se bem entendi, você quer uma interface funcional com um método void m()
. Nesse caso, você pode simplesmente usar um Runnable
.
Runnable
é anotado com @FunctionalInterface
e (ii) mesmo no contexto de uma expressão lambda, ele será executado em um thread: o thread em que o lambda é executado, que pode ser o thread atual ...
Runnable
intenção era ser usada para este propósito, não apenas para contextos de discussão.
Basta fazer o seu
@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();
};
}
}
e usar assim
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();
}
e a saída
HelloWorld
WorldHello
@FunctionalInterface permite apenas o método método abstrato Portanto você pode instanciar essa interface com a expressão lambda como abaixo e você pode acessar os membros da 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
A especificação da interface indica que ele deve fornecer código executável para aThread
classe. Não me parece certo usarRunnable
onde não se destina a execução por um encadeamento; parece enganoso.Runnable
é definido como umFunctionalInterface
porque atende às especificações de uma interface funcional e pode ser criado usando a sintaxe lambda. Por que não criar sua própria interface funcional? consulte Executável , consulte FunctionalInterface