我正在尝试像这样在Java 8中序列化一个lambda:
Runnable r =(Runnable&Serializable)()-> {doSomething();};
但是当它在kotlin中尝试相同的操作时,如下所示:
val r = {doSomething()} as(Runnable,Serializable)
我得到一个编译错误:
即使我尝试将Java代码粘贴到kotlin文件中,也会删除演员表的可序列化部分。因此,如何在kotlin中序列化lambda?
Kotlin Lambda默认是可序列化的,请参阅https://discuss.kotlinlang.org/t/are-closures-serializable/1620。
所以这将工作:
val r = { println("Hallo")} as java.io.Serializable
Run Code Online (Sandbox Code Playgroud)
如果您确实需要一个Runnable,那么这将不起作用,因为Kotlin仅创建一个Runnable实例:
val r = Runnable { println("Hallo")} as java.io.Serializable
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您必须显式创建一个对象:
val r = object: Runnable, java.io.Serializable {
override fun run() : Unit {
println("Hallo")
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
932 次 |
最近记录: |