Qual è l'interfaccia funzionale Java 8 per un metodo che non richiede nulla e non restituisce nulla?
Vale a dire, l'equivalente di C # senza parametri Action
con void
tipo restituito?
Qual è l'interfaccia funzionale Java 8 per un metodo che non richiede nulla e non restituisce nulla?
Vale a dire, l'equivalente di C # senza parametri Action
con void
tipo restituito?
Risposte:
Se ho capito bene vuoi un'interfaccia funzionale con un metodo void m()
. In tal caso puoi semplicemente usare un file Runnable
.
Runnable
è annotato con @FunctionalInterface
e (ii) anche nel contesto di un'espressione lambda verrà eseguito su un thread: il thread in cui viene eseguito lambda che potrebbe essere il thread corrente ...
Runnable
era destinato a essere utilizzato per questo scopo, non solo per i contesti di threading.
Creane uno tuo
@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 usalo in questo modo
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 l'uscita
HelloWorld
WorldHello
@FunctionalInterface consente solo il metodo astratto Quindi puoi istanziare quell'interfaccia con l'espressione lambda come sotto e puoi accedere ai membri dell'interfaccia
@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 specifica dell'interfaccia di indica che deve fornire codice eseguibile allaThread
classe. Non mi sembra giusto usareRunnable
dove non è inteso per l'esecuzione da parte di un thread; sembra fuorviante.Runnable
è definito come unFunctionalInterface
perché soddisfa le specifiche di un'interfaccia funzionale e può essere creato utilizzando la sintassi lambda. Perché non creare la tua interfaccia funzionale? vedi Runnable , vedi FunctionalInterface