Lambda Kotlin生成一个类的实例,并在一行代码中实现回调

Lambda Kotlin生成一个类的实例,并在一行代码中实现回调,lambda,callback,kotlin,simplify,Lambda,Callback,Kotlin,Simplify,我是Kotlin的新手,已经设法修改了Java定时器类,以便用两行代码实现它 我想知道是否有某种方法可以修改它并用一行代码实现它? 谢谢你的建议 两行执行: fun testTimer() { var tmr = MyTimer(1000, true) tmr.onTimer = { doSometing() } } 定时器类 class MyTimer { private var running = false private var repeatDelayM

我是Kotlin的新手,已经设法修改了Java定时器类,以便用两行代码实现它

我想知道是否有某种方法可以修改它并用一行代码实现它? 谢谢你的建议

两行执行:

fun testTimer() {
    var tmr = MyTimer(1000, true)
    tmr.onTimer = { doSometing() }
}
定时器类

class MyTimer {
    private var running = false
    private var repeatDelayMS: Int = 0
    private val handler = Handler()
    var onTimer:()-> Unit = {}

    private val runnable = object : Runnable {
        override fun run() {
            if (running) {
                onTimer()
                if (repeatDelayMS > 0)
                    handler.postDelayed(this, repeatDelayMS.toLong())
                else
                    stop()
            }
        }
    }

    constructor(repeatDelayMS: Int, runOnCreate: Boolean) {
        this.repeatDelayMS = repeatDelayMS
        if (runOnCreate)
            start()
    }

    fun start() {
        running = true
        handler.postDelayed(runnable, repeatDelayMS.toLong())
    }


    fun stop() {
        running = false
        handler.removeCallbacks(runnable)
    }
}

给定接口,您可能可以将属性声明移动到主构造函数,并将
start()
移动到
init

还要注意,
val
over
var
为您提供


给定接口,您可能可以将属性声明移动到主构造函数,并将
start()
移动到
init

还要注意,
val
over
var
为您提供

你可以

val tmr = MyTimer(1000, true).apply {
    onTimer = { doSomething() }
}
你可以

val tmr = MyTimer(1000, true).apply {
    onTimer = { doSomething() }
}

谢谢你花时间回答我的问题。这对我来说很有用,但我可能会在我的最终实现中使用@marianosimone的答案谢谢你花时间回答我的问题。这对我来说是可行的,但我可能会在我的最终实现中使用@marianosimone的答案