通过Lambdas自行执行匿名函数

时间:2016-06-30 11:43:30

标签: java lambda java-8 self-executing-function

在javascript中,有一种创建匿名函数并立即调用它的常见模式(通常称为self-executing anonymous functionimmediately-invoked function expression)。

使用Java 8 lambdas,有没有一种标准的方法来复制这种行为? 类似于(() -> doSomething())()

This question基本上问了同样的问题,但对于Java 7.我明确地寻找使用lambdas的构造。

2 个答案:

答案 0 :(得分:12)

并非没有声明类型。由于Java是一种静态类型的语言,并且函数不是一等公民,因此编译器需要知道你的lambda是什么 type 。函数不能自由浮动,它总是需要与类或类的实例相关联。

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

但是:您可以将lambda强制转换为Runnable类型,并向编译器提供有关您正在实施的@FunctionalInterface类型的提示: / p>

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

或没有括号,这使它成为一个单行:

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

我想这就像你得到的那样接近!

答案 1 :(得分:2)

这样的东西
((Runnable)(() -> System.out.println("Foobar"))).run();