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()
这对我来说都是相当不清楚的。我假设编译器知道根据方法期望的类型实例化匿名者?如果有两种方法仅在参数列表上有所不同,会发生什么情况?显然,在这种特定情况下没有,但在其他地方是可能的:RunnableSwingUtilities.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
        }
    }
}