7

JavaScript では、無名関数を作成してすぐに呼び出すという一般的なパターンがあります (通常、これは自己実行無名関数または即時呼び出し関数式と呼ばれます)。

Java 8 ラムダでは、この動作を複製する標準的な方法はありますか? のようなもの(() -> doSomething())()

この質問は基本的に同じ質問をしますが、Java 7 の場合です。ラムダを利用する構造を明示的に探しています。

4

2 に答える 2

13

タイプも宣言しないわけではありません。Java は静的に型付けされた言語であり、関数は第一級市民ではないため、コンパイラはラムダのを知る必要があります。関数は自由に動けるだけではなく、常にクラスまたはクラスのインスタンスに関連付ける必要があります。

Runnable r = () -> {
    System.out.println("Hello world!");
};
r.run();

ただし:ラムダをRunnable型にキャストして、実装している型についてコンパイラにヒントを与えることが@FunctionalInterfaceできます。

((Runnable)() -> {
    System.out.println("Hello world!");
}).run();

または中括弧なしで、ワンライナーになります:

((Runnable)() -> System.out.println("Hello world!")).run();

私はそれがあなたが得るのと同じくらい近いと思います!

于 2016-06-30T11:49:55.353 に答える
2

のようなものはどうですか

((Runnable)(() -> System.out.println("Foobar"))).run();
于 2016-06-30T11:50:23.543 に答える