关于JavaFX的写法,我这样写:
MenuItem menuItem1 = new MenuItem("Item 1")
menuItem1.setOnAction(e -> {
println "Menu Item 1 Selected"
})
这在Eclipse中给出了一个错误:“ Groovy:expecting')'found'->'”
MenuItem menuItem1 = new MenuItem("Item 1")
menuItem1.setOnAction({ e ->
println "Menu Item 1 Selected $e"
})
这很好。这样:
menuItem1.onAction = { e ->
println "Menu Item 1 Selected $e"
}
第一种方法是在Java8 +中执行此操作的方法。 Groovy为什么说这是非法的,并且在以上两种/三种方式中变量e
的使用或范围有什么不同?
答案 0 :(得分:2)
这只是Java与Groovy之间的区别。 Groovy从一开始就基本上具有闭包-Java在JDK8中添加了lambda。
来自docs:
Java 8支持lambda和方法引用:
Runnable run = () -> System.out.println("Run"); list.forEach(System.out::println);
Java 8 lambda或多或少可被视为匿名内部类。 Groovy不支持该语法,而是使用了闭包:
Runnable run = { println 'run' } list.each { println it } // or list.each(this.&println)