java JavaFX 8如何使用零参数实现lambda表达式
我仍然对Java lambdas/lambda语法感到困惑。我读到lambda有两种一般形式:
(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();
这不管用
我尝试了很多排列,但都没有用。尽管我一页又一页地钻研着兰博达斯,但我仍然无法在脑海中完全理解它
我真的很难对付兰博达斯。有人能给我一个清楚的解释吗
# 1 楼答案
.setOnFinished()
方法将EventHandler
作为参数(这是一个函数接口)它有一个名为handle()的方法,该方法采用泛型类型,这是您应该考虑其参数的方法;所以你必须向它传递一个参数
# 2 楼答案
如果lambda实现的方法有一个参数,那么即使不使用它,参数列表中也必须有一个参数您指出
event -> primaryStage.hide()
有效,因此您必须使用参数实现一个方法这就像你在用一个匿名类实现这个接口: