我想将一段代码(见下文)简化为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有多个非重写方法
是否可以简化它?
感谢
答案 0 :(得分:1)
简短回答:不,你不能简化它。
为什么呢?正如您已经指出的那样,因为在这里使用lambdas需要一个功能接口,而像Task这样的抽象类不能成为一个功能接口,即使它只有一个抽象方法。在Worker类中,您有多个抽象方法,因此在这种情况下,lambda也无法工作,因为您需要实现所有抽象方法才能实例化此类。