我在下面有以下定时器代码,但想写的是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表达式。 我在下面勾选了正确的答案。
答案 0 :(得分:2)
不幸的是,java 8设计者决定不支持SAM抽象类,只支持接口。由于TimerTask是抽象类,因此不能直接使用lambda。
您可以实现自己的变体(MyTask),接受Runnable作为参数,实现run()方法以在传递的Runnable上调用run然后调度new MyTask(()-> DownloadMessagesAndDisplay());
或者,考虑一种java方言(groovy,xtend,koitlin),它允许使用带有SAM抽象类的闭包/ lambdas语法。