我正在Scala中开发JavaFX8应用程序,但我无法弄清楚如何将方法引用传递给事件处理程序.为了澄清,我没有使用ScalaFX库,而是直接在JavaFX上构建我的应用程序.
这是相关的代码段.
InputController.java(我用Java编写了这个测试类,以隔离问题只使用方法引用)
public class InputController {
public void handleFileSelection(ActionEvent actionEvent){
//event handling code
}
public InputController() {
//init controller
}
}
Run Code Online (Sandbox Code Playgroud)
这工作(Java)
InputController inputController = new InputController();
fileButton.setOnAction(inputController::handleFileSelection);
Run Code Online (Sandbox Code Playgroud)
这不起作用(Scala)
val inputController = new InputController
fileButton.setOnAction(inputController::handleFileSelection)
Run Code Online (Sandbox Code Playgroud)
这是编译器的错误消息(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)
^
Run Code Online (Sandbox Code Playgroud)
如果我使用Scala 2.12.0-M2,我会收到不同的错误消息.
Error:(125, 45) missing argument list for method handleFileSelection in class Main …Run Code Online (Sandbox Code Playgroud)