可以在Scala中使用Java 8风格的方法引用吗?
发布时间:2020-12-16 09:11:20 所属栏目:安全 来源:网络整理
导读:我正在 Scala开发一个 JavaFX8应用程序,但我无法弄清楚如何传递方法引用到事件处理程序.为了澄清,我没有使用ScalaFX库,而是直接在JavaFX之上构建我的应用程序. 以下是相关的代码段. InputController.java(我在Java中写了这个测试类,以将问题隔离,仅消耗方法
我正在
Scala开发一个
JavaFX8应用程序,但我无法弄清楚如何传递方法引用到事件处理程序.为了澄清,我没有使用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引入的方法引用的本机方式?我知道使用lambda表达式的隐式转换方法,但是我想知道是否有方法使用类似于Java 8的方法引用,而不需要使用lambda decleration. 解决方法
inputController :: handleFileSelection是Java语法,它不支持或需要在Scala中,因为它已经有一个简短的语法lambdas像这样:inputController.handleFileSelection _或inputController.handleFileSelection(_)(inputController.handleFileSelection也可以工作,取决于上下文).
但是,在Java中,可以使用任何SAM(单抽象方法)接口,而EventHandler就是这样一个接口,可以使用lambdas和方法引用.在2.11之前的Scala中,这是不允许的,在2.11中有实验支持使用带有SAM接口的lambdas,必须使用-Xexperimental scalac标志启用,并从2.12开始,它完全支持,不需要启用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Bootstrap 响应式实用工具——visible-xs、visible-sm、hid
- Scala路线图Post 2.9.0
- 详解Shell cut用法
- Bootstrap3 表单-校验状态
- shell 运算符
- linux – “docker images”显示图像,“docker rmi”表示“
- “scala.runtime in compiler mirror not found”,但是在使
- 将ADO.NET或Webservice返回的DataSet转换成ADODB.Recordset
- angularjs – 如何从Angular2本地存储中保存和检索数据?
- bash – 有没有办法关闭并启动带有cli的AWS红移群集?