1

In JavaScript, it is possible to write a self-executing function like this:

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

I'm looking to do this in Java. So for example:

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

Is there such a thing?

4

3 回答 3

6

正如其他人所说,在 Java 中没有太多理由这样做,因为在 JavaScript 中这样做的原因在 Java 中不是问题。但是你可以在 Java 8 中做到这一点:

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

这本质上与@yshavit 的回答在 Java 7 中所做的相同。

于 2014-06-18T16:42:49.010 回答
4

该javascript并没有真正创建“自动执行”功能。它定义了一个函数,然后立即执行它。

Java 不允许你定义独立的函数,所以你不能在 Java 中这样做。但是,您可以声明一个匿名类并立即执行其方法之一:

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

这有时是用新线程完成的。就像是:

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

(尽管在很多情况下,您会希望进行更好的线程管理——例如,将 runnable 提交给 executor 服务。)

于 2014-06-18T16:40:47.990 回答
0

您可以创建将执行您的自定义函数的辅助方法(例如run和)。get

使用runif 函数不返回任何东西(副作用),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 回答