2016-12-11 3 views
1

würde Ich mag ein Stück Code vereinfachen (siehe unten) auf einen Lambda-Ausdruck:Wie konvertiert man innere javafx.concurrent.Task in einen Lambda-Ausdruck?

1/

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

2 /:

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

ich es so zu vereinfachen versucht

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

Leider beide Lösung nicht kompilieren als Aufgabe ist kein Schnittstelle und Worker hat mehrere nicht überschreibende Methoden

ist es möglich, es zu vereinfachen?

dank

+0

Mögliches Duplikat von [JAVA FX - Schnittstelle Lambda für Task] (http://stackoverflow.com/questions/30089593/java-fx-lambda-for-task-interface) – MikaelF

Antwort

1

Kurze Antwort: Nein, Sie es nicht vereinfachen kann.

Warum? Wie Sie bereits erwähnt haben, können Sie nicht, um Lambdas hier zu verwenden, benötigen Sie eine funktionale Schnittstelle, und eine abstrakte Klasse wie Task kann keine funktionale Schnittstelle sein, obwohl es nur eine abstrakte Methode hat. In der Worker-Klasse haben Sie mehrere abstrakte Methoden, also kann auch in diesem Fall ein Lambda nicht funktionieren, da Sie alle abstrakten Methoden implementieren müssen, um diese Klasse zu instanziieren.

+0

ja ich weiß. Ich bevorzuge Lambda für die Lesbarkeit. Danke trotzdem – bioinfornatics

Verwandte Themen