如何在Kotlin中序列化Lambda

时间:2018-10-05 03:42:42

标签: lambda kotlin

我正在尝试像这样在Java 8中序列化一个lambda:

Runnable r =(Runnable&Serializable)()-> {doSomething();};

但是当它在Kotlin中尝试相同的操作时:

val r = {doSomething()}为(Runnable,Serializable)

我得到一个编译错误:

enter image description here

即使我尝试将Java代码粘贴到kotlin文件中,它也会删除演员表的可序列化部分。因此,如何在kotlin中序列化lambda?

1 个答案:

答案 0 :(得分:4)

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")
    }
}