2017-07-25 65 views
0

我試圖重寫這段代碼如何寫lambda表達式與事件處理程序的JavaFX

new EventHandler<MouseEvent>() { 

    @Override 
    public void handle(MouseEvent event) { 
     System.out.println(e.hashCode()); 
    } 
}; 

new EventHandler<MouseEvent>(e -> System.out.println(e.hashCode())); 

和我得到的錯誤。我在這裏犯了什麼錯誤?

+2

第一個代碼塊的lambda等價物只是'事件 - > System.out.println(event.hashCode())'(沒有調用構造函數,這是我認爲你在做什麼)。 –

+0

用簡單的話來說,它是用lambda替換整個'functional interface'而不是接口中的函數。 ur首個代碼片段的lambda等價物是'event - > System.out.println(e.hashCode())'。你正在做的是基本上在構造函數中添加「lambda」。無效 – Dota2

回答

0

你在一開始的代碼寫就變成了:event -> {System.out.println(event.hashCode());

所以在使用(例如):

someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
          new EventHandler<MouseEvent>() { 
           @Override 
           public void handle(MouseEvent event) { 
            // TODO Auto-generated method stub 
            System.out.println(event.hashCode()); 
           } 
          }); 

可以

someNode.addEventHandler(MouseEvent.MOUSE_CLICKED, 
          event -> { System.out.println(event.hashCode()); } 
         ); 

因爲你的建議是一試實例化EventHandler,這是一個接口,所以你不能,你可以做一個匿名實現(第一種方式handle())或避免所有和使用lambda-exp