2016-12-11 2 views
1

Iは、ラムダ式にコードの断片(下記参照)を簡略化したい:javafx.concurrent.Taskをラムダ式に変換するにはどうすればいいですか?

Task<Void> sleeper = new Task<Void>() { 
      @Override 
      protected Void call() throws Exception { 
       try { 
        Thread.sleep(5000); 
       } catch (InterruptedException e) { 
       } 
       return null; 
      } 
     }; 

私はこのようにそれを簡素化しようとした:

1/

Task<Void> sleeper =() ->{ Thread.sleep(5000); }; 

2/

Worker<Void> sleeper =() ->{ Thread.sleep(5000); }; 

残念ながら、両方の解決策はタスクがインターフェイスとワーカーは複数の非優先メソッドを持っています

簡略化することは可能でしょうか?

おかげ

+0

タスクインターフェイスの[JAVA FX - ラムダ]の可能な複製(http://stackoverflow.com/questions/30089593/java-fx-lambda-for-task-interface) – MikaelF

答えて

1

短い答え:いいえ、あなたはそれを簡略化することができません。

なぜですか?既に指摘したように、lambdaを使用するには、関数インタフェースが必要で、タスクのような抽象クラスは、抽象メソッドが1つしかないのに、関数インタフェースにすることはできません。 Workerクラスには抽象メソッドが複数あるため、このクラスをインスタンス化するためにすべての抽象メソッドを実装する必要があるため、ラムダは機能しません。

+0

はい私は知っています。私は可読性のためにラムダを好む。とにかくありがとう – bioinfornatics

関連する問題