Kotlin的lambda表达式默认是可序列化的,详见https://discuss.kotlinlang.org/t/are-closures-serializable/1620。
因此以下代码可以正常工作:
val r = { println("Hallo")} as java.io.Serializable
如果你真的需要一个Runnable,那么这种方法行不通,因为Kotlin只创建了一个Runnable实例:
val r = Runnable { println("Hallo")} as java.io.Serializable
val r = object: Runnable, java.io.Serializable {
override fun run() : Unit {
println("Hallo")
}
}
r
呢?因为它现在是一个变量,当我像这样调用它:btnOk.OnClick{ r }
时,它不会被调用并打印出 "Hallo"。 - Dr.jackyr()
。对于第三种解决方案,需要这样调用:r.run()
。 - Rene