簡體   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