Java的lambda语法的细分是什么?
请解释 Java 8 的 lambda 方法的语法。
关于lambda函数是什么有很多解释,但我找不到对语法的彻底解释,而且我发现很难学会正确复制语法,因为我不明白为什么它们被写成它们。
以下是我遇到的一个常见案例,由 NetBeans 提供:
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new MainAppJFrame();
});
}
因此,不知何故,以下 lambda 表达式解析为匿名对象的 run() 方法:Runnable
() -> {
// do stuff
}
lambda语法是否正确,对吧?大括号仅包含匿名方法代码。括号是否是空参数,因为在本例中我们正在创建一个方法?->
Runnable.run()
这对我来说都是相当不清楚的。我假设编译器知道根据方法期望的类型实例化匿名者?如果有两种方法仅在参数列表上有所不同,会发生什么情况?显然,在这种特定情况下没有,但在其他地方是可能的:Runnable
SwingUtilities.invokeLater(Runnable)
SwingUtilities.invokeLater
interface ExampleLambdaConsumer {
public void doSomething(Runnable r);
public void doSomething(java.lang.reflect.Method m);
}
class C implements ExampleLambdaConsumer {
// implementations for doSomething methods here
public static void main(String[] args) {
doSomething(() -> {
// lambda method body here
}
}
}