Java 在时间线对象的构造函数中使用lambda表达式会导致错误
下面的语句建议在NetBeans中更改为lambda表达式Java 在时间线对象的构造函数中使用lambda表达式会导致错误,java,netbeans,javafx,lambda,Java,Netbeans,Javafx,Lambda,下面的语句建议在NetBeans中更改为lambda表达式 Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), new EventHandler() { @Override public void handle(Event event) { //do something } })); 但是,当我应用假定的更
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
}));
当无法使用消息编译时:
未找到关键帧(持续时间,(事件)的合适构造函数
eve[…]})-参数不匹配
问题是为什么NetBeans建议了一些它无法实现的东西?以及如何在Timeline构造函数中实际使用lambda函数?
谢谢。您正在呼叫的是一个EventHandler
,而不是EventHandler
所以你需要
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
}
}));
Timeline Timeline=new Timeline(新的关键帧(Duration.millis(5000),new EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
//做点什么
}
}));
在这种情况下,NetBeans将能够用正确的lambda表达式替换它。我觉得有必要指出IDE在自动生成lambda方面很糟糕。如果它只是作为
event->{/*code*/}
(而不是“(ActionEvent事件)->{…})编写的,这本来就不会是一个问题。