1. ホーム

[解決済み】Java 8 lambda Void 引数

2022-04-03 22:28:19

質問

例えば、Java 8で次のような機能的なインターフェースがあるとします。

interface Action<T, U> {
   U execute(T t);
}

また、引数や戻り値のないアクションが必要な場合もあります。そこで私は のようなものです。

Action<Void, Void> a = () -> { System.out.println("Do nothing!"); };

しかし、コンパイルエラーが発生するため、次のように記述する必要があります。

Action<Void, Void> a = (Void v) -> { System.out.println("Do nothing!"); return null;};

どっちが醜いんだろう。を取り除く方法はないのでしょうか? Void タイプ・パラメータは?

解決方法は?

を変換する小さなヘルパー関数があれば、このような構文が可能になります。 RunnableAction<Void, Void> (に配置することができます)。 Action など)。

public static Action<Void, Void> action(Runnable runnable) {
    return (v) -> {
        runnable.run();
        return null;
    };
}

// Somewhere else in your code
 Action<Void, Void> action = action(() -> System.out.println("foo"));