【发布时间】:2014-06-23 15:14:40
【问题描述】:
以前:
btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("Hello World!");
}
});
现在,我们可以:
btn.setOnAction(
event -> System.out.println("Hello World!")
);
现在,我尝试在使用 Java 库时在 Scala 中执行此操作。
我正在使用 JavaFX(Java 1.8 SE 默认包含它)。 试试:
chart.setOnMouseClicked( (e: MouseEvent) => println("Noice") )
但是,我得到:
Error:(204, 46) type mismatch;
found : javafx.scene.input.MouseEvent => Unit
required: javafx.event.EventHandler[_ >: javafx.scene.input.MouseEvent]
chart.setOnMouseClicked( (e: MouseEvent) => println("Noice") )
^
旧样式效果很好:
chart.setOnMouseClicked( new EventHandler[MouseEvent] {
override def handle(event: MouseEvent): Unit = println("NOT NOICE")
} )
我在 IntelliJ 中将项目语言级别设置为 Java 8,我使用的是 Scala 2.11.1,以及来自 Oracle 版本 1.8.0_05 的 Java
我在这里缺少什么?还是根本不可能像在提到的示例中那样将 lambda 表达式从 Scala 传递到 Java?
【问题讨论】:
标签: scala lambda javafx java-8 javafx-8