无限期地将Runnable从java转换为kotlin

Bin*_*abu 13 java android kotlin

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

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

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

这是我的kotlin代码:

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

我不明白Runnable我应该传递什么mHandler.postDelayed.什么是正确的解决方案?另一件有趣的事情是,当我提供这段代码时,kotlin到java转换器会冻结.

Mih*_*x64 27

Lambda表达式没有this,但是对象表达式(匿名类)可以.

object : Runnable {
    override fun run() {
        handler.postDelayed(this, 1000)
    }
}
Run Code Online (Sandbox Code Playgroud)


Hob*_*Joe 5

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

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

timer.schedule(monitor, 1000, 1000)
Run Code Online (Sandbox Code Playgroud)

发件人:在java中每2秒重复一次操作