Lambda Kotlin生成一个类的实例,并在一行代码中实现回调
我是Kotlin的新手,已经设法修改了Java定时器类,以便用两行代码实现它 我想知道是否有某种方法可以修改它并用一行代码实现它? 谢谢你的建议 两行执行: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
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
overvar
为您提供
给定接口,您可能可以将属性声明移动到主构造函数,并将
start()
移动到init
块
还要注意,val
overvar
为您提供
你可以
val tmr = MyTimer(1000, true).apply {
onTimer = { doSomething() }
}
你可以
val tmr = MyTimer(1000, true).apply {
onTimer = { doSomething() }
}
谢谢你花时间回答我的问题。这对我来说很有用,但我可能会在我的最终实现中使用@marianosimone的答案谢谢你花时间回答我的问题。这对我来说是可行的,但我可能会在我的最终实现中使用@marianosimone的答案