Преобразование бесконечно запущенного Runnable из java в 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
    }
};

Это мой код Котлина:

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

Я не понимаю, что Runnable Я должен пройти в mHandler.postDelayed. Каково правильное решение? Еще одна интересная вещь заключается в том, что конвертер kotlin в java зависает, когда я подаю этот код.

2 ответов


лямбда-выражения не имеют this, но выражения объектов (анонимные классы) делают.

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

немного другой подход, который может быть более читабельным

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

timer.schedule(monitor, 1000, 1000)

From:повторяйте действие каждые 2 секунды в java