如何使用EventHandler javafx编写lambda表达式

Pas*_*mer 3 java lambda expression javafx eventhandler

我正在尝试重写这段代码

new EventHandler<MouseEvent>() {

    @Override
    public void handle(MouseEvent e) {
        System.out.println(e.hashCode());
    }
};
Run Code Online (Sandbox Code Playgroud)

作为

new EventHandler<MouseEvent>(e -> System.out.println(e.hashCode()));
Run Code Online (Sandbox Code Playgroud)

我收到错误。我在这里犯了什么错误?

azr*_*zro 7

lambda 表达式在这里取代了整个过程FunctionalInterface,而不仅仅是它的方法,所以它constructor + lambda不仅仅是lambda

  1. 使用EventHandleras 参数:

    someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
                            new EventHandler<MouseEvent>() {
                               @Override
                               public void handle(MouseEvent event) {
                                  System.out.println(event.hashCode());
                               }
                            });
    
    Run Code Online (Sandbox Code Playgroud)

    变成

     someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
                              event ->  System.out.println(event.hashCode()));
    
    Run Code Online (Sandbox Code Playgroud)

  1. EventHandler在变量中使用:

    EventHandler<MouseEvent> eh = new EventHandler<MouseEvent>() {
                                       @Override
                                       public void handle(MouseEvent event) {
                                           System.out.println(event.hashCode());
                                       }
                                };
    
    Run Code Online (Sandbox Code Playgroud)

    它将变成:

    EventHandler<MouseEvent> eh = e -> System.out.println(e.hashCode());
    
    Run Code Online (Sandbox Code Playgroud)


存在多种使用 lambda 的方式,带或不带参数,例如:

Runnable r = () -> System.out.println("Here");
Run Code Online (Sandbox Code Playgroud)