将无限期运行的 Runnable 从 java 转换为 kotlin

2022-09-01 13:57:59

我在java中有一些这样的代码来监视某个文件:

private Handler mHandler = new Handler();
private final Runnable monitor = new Runnable() {

    public void run() {
        // Do my stuff
        mHandler.postDelayed(monitor, 1000); // 1 second
    }
};

这是我的 kotlin 代码:

private val mHandler = Handler()
val monitor: Runnable = Runnable {
    // do my stuff
    mHandler.postDelayed(whatToDoHere, 1000) // 1 second
}

我不明白我应该传递什么。什么是正确的解决方案?另一个有趣的事情是,当我输入此代码时,kotlin到java转换器冻结了。RunnablemHandler.postDelayed


答案 1

Lambda 表达式没有 ,但对象表达式(匿名类)有。this

object : Runnable {
    override fun run() {
        handler.postDelayed(this, 1000)
    }
}

答案 2

稍微不同的方法,可能更具可读性

val timer = Timer()
val monitor = object : TimerTask() {
    override fun run() {
        // whatever you need to do every second
    }
}

timer.schedule(monitor, 1000, 1000)

From:在 java 中每 2 秒重复一次操作


推荐