2017-01-31 2 views
0

次の文はです。をNetBeansのラムダ式に変更することを提案しました。タイムラインオブジェクトのコンストラクタでラムダ式を使用するとエラーが発生する

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), new EventHandler() { 
      @Override 
      public void handle(Event event) { 
       //do something 
      } 
})); 

しかし、私はなって変更を適用する場合(Altキー+ Enterキー)は、私が持っている:

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), (Event event) -> { 
//do something 
})); 

これはメッセージでコンパイルされません。

なし適しをKeyFrameのコンストラクタが見つかりました(Duration、(Eventeve [...]}}})) - 引数の不一致

NetBeansが実装できないものを提案する理由は何ですか?実際にタイムラインコンストラクタでラムダ関数を使用する方法は?おかげさまで

答えて

1

KeyFrame constructorは、EventHandler<Event>ではなく、EventHandler<ActionEvent>です。 (

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), new EventHandler() { 
      @Override 
      public void handle(Event event) { 
       //do something 
      } 
})); 

だから、あなたはあなたのイベントハンドラ匿名インナークラスの生タイプで始まるので、NetBeansは混乱し、不正なコードを挿入している理由がある

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), (ActionEvent event) -> { 
//do something 
})); 

が必要NetBeansでラムダ式を使用するように警告するだけでなく、ラムダ式を使用することを推奨します)

いいえNetBeansは正しいラムダ式と交換することができるだろう

Timeline timeline = new Timeline(new KeyFrame(Duration.millis(5000), new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       //do something 
      } 
})); 

その場合:rmal良いコーディング慣行は適切に型指定されたイベントハンドラを使用します。

+1

私は、IDEが自動生成ラムダでひどいことを指摘する必要があると感じています。 {(ActionEvent event) - {{}} 'の代わりに 'event - > {/ * code * /}'と書かれていたのであれば、これはまず問題ではないでしょう。 – VGR

関連する問題