请解释Java 8的lambda方法的语法.
有很多解释了那里什么拉姆达功能,但我找不到语法的详尽的解释,而我发现很难学会正确复制的语法,因为我不明白为什么他们"按原样重写.
这是我遇到的一个常见案例,由NetBeans提供:
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new MainAppJFrame();
});
}
Run Code Online (Sandbox Code Playgroud)
所以,不知何故,以下lambda表达式正在解析为匿名Runnable对象的run()方法:
() -> {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这->是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 …Run Code Online (Sandbox Code Playgroud) 是否可以为界面创建对象,如果是,我们怎么办?根据我的观点,以下代码说我们可以:
Runnable r= new Runnable(){
// some implementation
}