我正在尝试重写这段代码
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
System.out.println(e.hashCode());
}
};
作为
new EventHandler<MouseEvent>(e -> System.out.println(e.hashCode()));
然后我收到错误。我的错误是什么?
最佳答案
lambda 表达式在这里取代了整个 FunctionalInterface
而不仅仅是它的方法,所以它不是 constructor + lambda
而只是 lambda
:
使用
EventHandler
作为参数:someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { System.out.println(event.hashCode()); } });
变成:
someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> System.out.println(event.hashCode()));
在变量中使用
EventHandler
:EventHandler<MouseEvent> eh = new EventHandler<MouseEvent>() { @Override public void handle(MouseEvent event) { System.out.println(event.hashCode()); } };
它将变成:
EventHandler<MouseEvent> eh = e -> System.out.println(e.hashCode());
存在多种使用 lambda 的方式,有或没有参数,例如:
Runnable r = () -> System.out.println("Here");
关于java - 如何使用 EventHandler javafx 编写 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45306039/