Можно ли использовать ссылки на методы в стиле Java 8 в Scala?
Я занимаюсь разработкой приложения JavaFX8 в Scala, но я не мог понять, как передать ссылку на метод в обработчик событий. Для пояснения, я не использую библиотеку ScalaFX, а строю свое приложение прямо поверх JavaFX.
Вот соответствующий фрагмент кода.
InputController.java (Я написал этот тестовый класс на Java, чтобы изолировать проблему, чтобы использовать только ссылку на метод)
public class InputController {
public void handleFileSelection(ActionEvent actionEvent){
//event handling code
}
public InputController() {
//init controller
}
}
Это работает (Java)
InputController inputController = new InputController();
fileButton.setOnAction(inputController::handleFileSelection);
Это не работает (Scala)
val inputController = new InputController
fileButton.setOnAction(inputController::handleFileSelection)
Вот сообщение об ошибке от компилятора (Scala 2.11.6).
Error:(125, 45) missing arguments for method handleFileSelection in class Main;
follow this method with '_' if you want to treat it as a partially applied function
fileButton.setOnAction(inputController::handleFileSelection)
^
Если я использую Scala 2.12.0-M2, я получаю другое сообщение об ошибке.
Error:(125, 45) missing argument list for method handleFileSelection in class Main
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `handleFileSelection _` or `handleFileSelection(_)` instead of `handleFileSelection`.
fileButton.setOnAction(inputController::handleFileSelection)
^
Есть ли собственный способ, которым Scala может использовать ссылки на методы, представленные в Java 8? Мне известен подход к неявным преобразованиям для использования лямбда-выражения, но я хочу знать, есть ли способ использовать ссылку на метод, аналогичную Java 8, без необходимости использовать лямбда-выражение.