lambda - 如何在Kotlin中序列化Lambda

标签 lambda kotlin

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

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

但是当它在kotlin中尝试相同的操作时,如下所示:

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

我得到一个编译错误:

enter image description here

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

最佳答案

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

关于lambda - 如何在Kotlin中序列化Lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52658054/

相关文章:

java - 编译器如何知道 lambda 正在实现哪个类?

kotlin - EnumClass.values() 在 Kotlin 中如何工作?

java - 从 Factory 重构中提取 lambda(使用 IDE)?

java - Eclipse中的Kotlin和Java项目,NoClassDefFoundError,类文件在哪里?

java - Kotlin 中可调整大小的二维数组

eclipse - Kotlin 无法使用 Eclipse 工作区解析

Kotlin 将类型参数具体化为函数参数

java - 如何在 Java 的 Lambda API 中构建复制函数的映射

python - 在 python 中,如何在后台将参数传递给嵌套函数?

angularjs - 如何将 lambda 表达式传递给 AngularJS 指令