Was ist die Java 8-Funktionsschnittstelle für eine Methode, die nichts nimmt und nichts zurückgibt?
Dh, die äquivalent zu dem C # parameter Action
mit void
Rückgabetyp?
Was ist die Java 8-Funktionsschnittstelle für eine Methode, die nichts nimmt und nichts zurückgibt?
Dh, die äquivalent zu dem C # parameter Action
mit void
Rückgabetyp?
Antworten:
Wenn ich das richtig verstehe, möchten Sie eine funktionale Schnittstelle mit einer Methode void m()
. In diesem Fall können Sie einfach a verwenden Runnable
.
Runnable
ist mit annotiert @FunctionalInterface
und (ii) wird sogar im Kontext eines Lambda-Ausdrucks in einem Thread ausgeführt: dem Thread, in dem das Lambda ausgeführt wird, der möglicherweise der aktuelle Thread ist ...
Runnable
dies für diesen Zweck verwendet werden sollte, nicht nur zum Einfädeln von Kontexten.
Mach einfach deine eigenen
@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();
};
}
}
und benutze es so
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();
}
und die Ausgabe
HelloWorld
WorldHello
@FunctionalInterface erlaubt nur Methode abstrakte Methode Daher können Sie diese Schnittstelle mit Lambda-Ausdruck wie unten instanziieren und auf die Schnittstellenelemente zugreifen
@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
Die Schnittstellenspezifikation gibt an, dass derThread
Klasse ausführbarer Code bereitgestellt werden soll. Es erscheint mir nicht richtig, dort zu verwenden,Runnable
wo es nicht für die Ausführung durch einen Thread vorgesehen ist. scheint irreführend.Runnable
wird als definiert,FunctionalInterface
weil es die Spezifikation einer funktionalen Schnittstelle erfüllt und mithilfe der Lambda-Syntax erstellt werden kann. Warum nicht eine eigene Funktionsoberfläche erstellen? siehe Runnable , siehe FunctionalInterface