当前位置: 首页 > 知识库问答 >
问题:

在Timeline对象的构造函数中使用lambda表达式会导致错误

夔桐
2023-03-14

建议将以下语句更改为NetBeans中的lambda表达式。

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), new EventHandler() {
            @Override
            public void handle(Event event) {
                //do something
            }
}));

但是,当我应用假定的更改(Alt Enter)时,我得到了:

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), (Event event) -> {
 //do something
}));

当这不会与消息一起编译时:

没有找到合适的构造函数为KeyFrame(持续时间,(事件前夕[…]}}})-参数不匹配

问题是为什么NetBeans会提出一些它无法实现的东西?如何在Timeline构造函数中实际使用lambda函数?谢谢

共有1个答案

宗政浩慨
2023-03-14

您正在调用的关键构造函数采用事件处理程序

所以你需要

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), (ActionEvent event) -> {
 //do something
}));

NetBeans感到困惑并插入错误代码的原因是,您从事件处理程序匿名内部类的原始类型开始:

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), new EventHandler() {
            @Override
            public void handle(Event event) {
                //do something
            }
}));

(我希望NetBeans在这里发出警告,并建议使用lambda表达式。)

正常的良好编码实践会使用正确类型的事件处理程序:

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                //do something
            }
}));

在这种情况下,NetBeans将能够用正确的lambda表达式替换它。

 类似资料:
  • 上面写着编译错误 Employee::new、1L、“”、“ 无法解析构造函数。

  • 如何在lambda表达式中将对象设置为另一个?我犯了错误

  • 输出为: 我用带有捕获对象lambda创建了一个std:function。它应该为lambda创建对象的本地副本,但它创建了两次副本(看看move constructor call-用粗体突出显示)。实际上,它会复制整个lambda对象。为什么?我怎么才能避免呢?我正在使用lambdas进行线程间事件处理,它们可能会捕获大量的日期,所以我试图找到一种方法来避免不必要的复制。因此,任务很简单--以最

  • 我有一个中等大小的Spring应用程序。当我重构一些loc时,我注意到以下行为: 事实上,注入工作正常: 当我尝试使用构造函数注入时,环境为空,我的应用程序告诉我,由于循环引用,它无法创建配置bean: 在堆栈的某个地方: 原因:org.springframework.beans.factory.Bean货币InCreationException:创建名为appConfig的bean时出错:请求的

  • 本文向大家介绍python lambda表达式在sort函数中的使用详解,包括了python lambda表达式在sort函数中的使用详解的使用技巧和注意事项,需要的朋友参考一下 1.lambda表达式一般用法 语法: lamda argument:expression example: 2.lambda表达式在sort函数中的使用 假如a是一个由元组构成的列表,对该列表进行排序时,我们需要用到参

  • 如何重构我的代码,以便我的 for 表达式中没有 if 语句? 我得到一个执行异常: 我正在下面定义一个if选项,这导致了问题: 我应该开始使用什么模式来避免此错误?