2015-11-26 44 views
11

mã ban đầu của tôi là thế này:Java Lambda phương pháp tham chiếu không làm việc

private static void onClicked(MouseEvent event) { 
    // code to execute 
} 

// somewhere else in the program: 
setOnMouseClicked(event -> SomeClass.onClicked(event)); 

Nhưng IntelliJ nói "có thể được thay thế bằng phương pháp tham khảo" mà tôi không quá chắc chắn làm thế nào để làm. Tôi nghĩ tôi sẽ làm điều này:

setOnMouseClicked(event -> SomeClass::onClicked); 

Nhưng sau đó điều đó cho tôi biết "void không phải là giao diện chức năng", nhưng tôi không muốn trả lại bất kỳ thứ gì. Tôi chỉ muốn người xử lý thực thi. Làm thế nào tôi có thể sửa lỗi này?

Cảm ơn bạn!

Trả lời

30

Bạn đang trộn biểu thức lambda với tham chiếu phương thức.

Thay đổi

setOnMouseClicked(event -> SomeClass::onClicked); 

để

setOnMouseClicked(SomeClass::onClicked); 
+0

wow đó là nhanh chóng, cảm ơn bạn !! – Mayron

+6

@Mayron FIY, IntelliJ có thể thay đổi biểu thức lambda với tham chiếu phương thức cho bạn (khi có thể). Chỉ cần sử dụng alt + enter phím tắt trên biểu thức – Prim

+0

@ Prim Cảm ơn, chỉ cần thử nó ra. Rất hữu ích để biết! – Mayron

Các vấn đề liên quan