繁体   English   中英

JavaFX 8如何使用零参数执行lambda表达式

[英]JavaFX 8 How to do a lambda expression with zero parameters

我仍然对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斗争。 有人可以给我一个明确的解释。

.setOnFinished()方法将EventHandler作为参数(这是一个功能接口)。

它有一个名为handle()的方法,它接受泛型类型,这是你应该考虑其参数的方法; 所以你必须传递一个参数。

如果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
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM