我正在尝试重写这段代码
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
System.out.println(e.hashCode());
}
};
as
new EventHandler<MouseEvent>(e -> System.out.println(e.hashCode()));
我遇到了错误。这里我的错误是什么?
我正在尝试重写这段代码
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent e) {
System.out.println(e.hashCode());
}
};
as
new EventHandler<MouseEvent>(e -> System.out.println(e.hashCode()));
我遇到了错误。这里我的错误是什么?
lambda表达式是用来替代整个FunctionalInterface
而不仅仅是其中的方法,所以它不是构造函数 + lambda
而只是lambda
:
Use the EventHandler
as parameter :
someNode.addEventHandler(MouseEvent.MOUSE_CLICKED,
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println(event.hashCode());
}
});
Becomes :
someNode.addEventHandler(MouseEvent.MOUSE_CLICKED,
event -> System.out.println(event.hashCode()));
Use the EventHandler
in a variable :
EventHandler<MouseEvent> eh = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println(event.hashCode());
}
};
It'll become :
EventHandler<MouseEvent> eh = e -> System.out.println(e.hashCode());
Runnable r = () -> System.out.println("Here");
EventHandler
方法确实有一个参数,但对于Supplier/Runnable/...
您可以(请参见编辑)。 - azro
event -> System.out.println(event.hashCode())
(不包括构造函数的调用,我认为这是你尝试做的)。 - James_Devent -> System.out.println(e.hashCode())
。您正在做的基本上是在构造函数中添加“lambda”。无效。 - Dota2