java - 让计时器作为 lambda 执行

标签 java lambda timer

我有下面的计时器代码,但想写的是一个 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/

相关文章:

java - 用于 Web 应用程序的一台服务器或两台服务器

java - 按键绑定(bind)按钮时按钮不显示

java - 不知道为什么我的 gui 应用程序出现 nullpointerException

ArrayList 数据类型的 Java 重载

java - 使用方法引用来检查 boolean 值匹配而不是 lambda

c - 如何在 timerfd_create 中检查定时器到期

python - 在 lambda 中调用属性 setter

python - 过滤 python 列表,同时将未过滤的术语耦合到其他列表。

java - 当计时器达到 0 时从 Pane 中删除元素吗?

c - 帮助解决 setitimer/信号问题