在
javascript中,有一种创建匿名函数并立即调用它的常见模式(通常称为
self-executing anonymous function或
immediately-invoked function expression).
使用Java 8 lambdas,有没有一种标准的方法来复制这种行为?
像(() – > doSomething())()之类的东西.
This question基本上问了同样的问题,但对于Java 7.我明确地寻找使用lambdas的构造.
解决方法
并非没有声明类型.由于Java是静态类型语言,并且函数不是一等公民,因此编译器需要知道lambda的类型.函数不能只是自由浮动,它总是需要与类或类的实例相关联.
Runnable r = () -> { System.out.println("Hello world!"); }; r.run();
但是:您可以将lambda转换为Runnable类型,并为编译器提供有关您正在实现的@FunctionalInterface类型的提示:
((Runnable)() -> { System.out.println("Hello world!"); }).run();
或者没有括号,这使它成为一个单行:
((Runnable)() -> System.out.println("Hello world!")).run();
我想这就像你会得到的那样接近!