自执行Java方法

时间:2014-06-18 16:34:52

标签: java java-7 self-executing-function

在JavaScript中,可以编写一个这样的自执行函数:

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

我希望用Java做到这一点。例如:

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

有这样的事吗?

3 个答案:

答案 0 :(得分:6)

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

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

本质上是@ yshavit在Java 7中的回答。

答案 1 :(得分:4)

javascript并没有真正创造出一个自我执行的"功能。它定义了一个函数,然后立即执行它。

Java不允许您定义独立函数,因此您无法在Java中执行此操作。但是,您可以声明一个匿名类并立即执行其中一个方法:

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

这有时是通过新线程完成的。类似的东西:

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

(虽然在很多情况下,你会想要做更好的线程管理 - 例如,将runnable提交给执行者服务。)

答案 2 :(得分:0)

您可以创建辅助方法(例如runget)来执行您的自定义功能。

如果函数不返回任何内容(副作用),则使用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");

    }

}