回答:
私が正しく理解していれば、メソッドとの機能的なインターフェースが必要ですvoid m()
。その場合は、単にを使用できますRunnable
。
Runnable
は注釈が付けられ@FunctionalInterface
、(ii)ラムダ式のコンテキストでもスレッドで実行されます:現在のスレッドである可能性があるラムダが実行されるスレッド...
Runnable
は、スレッドのコンテキストだけでなく、この目的で使用することを意図していたことを確認しました。
自分で作る
@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();
};
}
}
このように使用します
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();
}
そして出力
HelloWorld
WorldHello
@FunctionalInterfaceはメソッドの抽象メソッドのみを許可するため、以下のようにラムダ式を使用してそのインターフェースをインスタンス化でき、インターフェースメンバーにアクセスできます
@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
のインターフェース仕様は、Thread
クラスに実行可能コードを提供することを示しています。Runnable
スレッドでの実行を目的としていない場所で使用するのは適切ではないようです。誤解を招くようです。関数インターフェイスの仕様を満たし、ラムダ構文を使用して作成できるため、はRunnable
として定義されてFunctionalInterface
います。独自の機能的なインターフェースを作成してみませんか?見たRunnableを参照してくださいFunctionalInterfaceを