lambda - Kotlin 创建一个类的实例并在一行代码中实现回调

标签 lambda callback kotlin simplify

我是 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)
    }
}

最佳答案

你可以做

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

关于lambda - Kotlin 创建一个类的实例并在一行代码中实现回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51852291/

相关文章:

c# - 不能使用 lambda 表达式作为动态调度的参数

python - 为什么 lambda 要求 2 个参数,尽管给出了 2 个参数?

c# - Parse.com - 如何统一制作回调函数?

android - 有没有办法在 RecyclerView 中使用多个 LayoutManagers 和 MergeAdapter?

function - Java 不允许使用最终的默认方法。但是 Kotlin 允许吗?

kotlin - Kotlin和parallelStream toArray

Python 减少 len() 函数

python - 使用 Lambda 创建自定义 Keras Layer 对象

python - 在 tkinter 的 root.mainloop() 开始后初始化(Python)

python - 过程在导入时的执行方式与在其 native 模块中运行时的执行方式不同