我有下面的计时器代码,但想写的是一个 lambda 表达式。
private void setupPollingTimmer() {
timer.scheduleAtFixedRate(new DownloadMessagesAndDisplayTask(), TIMERPERIOD,TIMERPERIOD);
}
private class DownloadMessagesAndDisplayTask extends TimerTask {
public void run() {
DownloadMessagesAndDisplay();
// timer.cancel(); //Not necessary because we call System.exit
}
}
我浏览过谷歌,甚至尝试过 () -> 但它不喜欢它。
另外,如果我应该使用更好的 Timer 版本,请说出来。
注意:假定的重复项并非重复项,因为其勾选的答案不使用 lambda 表达式。 我已在下面勾选了正确答案。
最佳答案
不幸的是,java 8 设计者决定不支持 SAM 抽象类,仅支持接口(interface)。由于 TimerTask 是抽象类,因此不能直接使用 lambda。
您可以实现自己的变体(MyTask),接受 Runnable 作为参数,实现 run() 方法来调用传递的 Runnable 上的运行,然后调度 new MyTask(()-> DownloadMessagesAndDisplay());
或者,考虑一种 Java 方言(groovy、xtend、koitlin),它允许将闭包/lambda 语法与 SAM 抽象类一起使用。
关于java - 让计时器作为 lambda 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37118486/