如何将内部javafx.concurrent.Task转换为lambda表达式?

时间:2016-12-11 15:57:32

标签: lambda javafx-8

我想将一段代码(见下文)简化为lambda表达式:

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 ); };

不幸的是,两个解决方案都没有编译,因为任务不是一个接口而且Worker有多个非重写方法

是否可以简化它?

感谢

1 个答案:

答案 0 :(得分:1)

简短回答:不,你不能简化它。

为什么呢?正如您已经指出的那样,因为在这里使用lambdas需要一个功能接口,而像Task这样的抽象类不能成为一个功能接口,即使它只有一个抽象方法。在Worker类中,您有多个抽象方法,因此在这种情况下,lambda也无法工作,因为您需要实现所有抽象方法才能实例化此类。