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