web-dev-qa-db-fra.com

Convertir Runnable en cours d'exécution indéfinie de Java en kotlin

J'ai du code comme celui-ci dans Java qui surveille un certain fichier:

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

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

Voici mon code kotlin:

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

Je ne comprends pas ce que Runnable je devrais passer à mHandler.postDelayed. Quelle est la bonne solution? Une autre chose intéressante est que le kotlin vers Java se bloque lorsque je fournis ce code.

13
Binoy Babu

Les expressions lambda n'ont pas this, mais les expressions d'objet (classes anonymes) en ont.

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

Une approche légèrement différente qui peut être plus lisible

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

timer.schedule(monitor, 1000, 1000)

De: Répéter une action toutes les 2 secondes en Java

5
Hobo Joe