[英]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.