1

JavaScript では、次のような自己実行関数を書くことができます。

(function foo() {
    console.log("bar");
}());

私はJavaでこれをやろうとしています。たとえば、次のようになります。

// This code does not work obviously
public static void main(String[] args) {
    (foo() {
        System.out.println("bar");
    }());
}

そのようなことはありますか?

4

3 に答える 3

6

他の人が言ったように、JavaScript でこれを行う理由は Java の問題ではないため、Java でこれを行う理由はあまりありません。しかし、Java 8 でこれを行うことができます。

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

これは本質的に、@yshavitの答えがJava 7で行ったことと同じです。

于 2014-06-18T16:42:49.010 に答える
4

そのJavaScriptは、実際には「自己実行」機能を作成していません。関数を定義し、すぐに実行します。

Java ではスタンドアロン関数を定義できないため、Java でこれを行うことはできません。ただし、匿名クラスを宣言して、そのメソッドの 1 つをすぐに実行することはできます。

new Runnable() {
  @Override
  public void run() {
    System.out.println("hello");
  }
}.run();

これは、新しいスレッドで行われることがあります。何かのようなもの:

new Thread(new Runnable() {
    // override Runnable.run
}).start();

(ただし、多くの場合、より適切なスレッド管理を行う必要があります。たとえば、実行可能ファイルをエグゼキュータ サービスに送信します。)

于 2014-06-18T16:40:47.990 に答える
0

カスタム関数を実行するヘルパー メソッド (例runおよび) を作成できます。get

run関数が何も返さない場合 (副作用) などに使用しgetます。

import java.util.function.Supplier;

public interface MyApp {

    static void run(Runnable supp) {
        supp.run();
    }

    static <R> R get(Supplier<R> supp) {
        return supp.get();
    }

    static void test() {

        run(() -> System.out.println("bar"));
        var v = get(() -> "Hello");

    }

}
于 2020-08-11T16:22:32.367 に答える