我仍然对Java lambdas / lambda语法感到困惑。我读到lambdas有两种一般形式:
(param1, param2, ...) -> expression;
(param1, param2, ...) -> { /* code statements */ };
好的,好的。并且当表达式不接受参数(并且被称为空)时,仍然需要括号。
现在,以下代码正常运行:
primaryStage.show();
PauseTransition pause =
new PauseTransition(Duration.seconds(3));
pause.setOnFinished(event ->
primaryStage.hide());
pause.play();
但是,当我认为primaryStage.hide()
不需要任何参数时,我想我可以从lambda表达式中删除参数。这(遵守保留括号的规则)给出了以下代码:
primaryStage.show();
PauseTransition pause =
new PauseTransition(Duration.seconds(3));
pause.setOnFinished(() ->
primaryStage.hide());
pause.play();
哪个不起作用!!!
我尝试了许多排列,但无济于事。尽管仔细研究了关于lambdas的页面和页面,我仍然无法直接理解它。
我真的在与lambdas斗争。有人可以给我一个明确解释所涉及的内容。
答案 0 :(得分:2)
.setOnFinished()
方法将EventHandler
作为参数(这是一个功能接口)。
它有一个名为handle()的方法,它接受泛型类型,这是你应该考虑其参数的方法;所以你必须传递一个参数。
答案 1 :(得分:1)
如果你的lambda实现的方法有一个参数,你的参数列表中必须有一个参数,即使你不使用它。你表示event -> primaryStage.hide()
有效,所以你必须用参数实现一个方法。
这就像你实际使用匿名类实现该接口一样:
new Consumer<Event>() {
@Override public void accept(Event event) { // can't omit the argument!
primaryStage.hide(); // doesn't use the argument
}
}