代码之家  ›  专栏  ›  技术社区  ›  j2emanue

如何在kotlin中序列化lambda

  •  4
  • j2emanue  · 技术社区  · 6 年前

    我尝试序列化java 8中的lambda,其执行方式如下:

    Runnable r=(可运行&可序列化)()->{剂量学();};

    val r={doSomething()}as(可运行,可序列化)

    我得到一个编译错误:

    enter image description here

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

    1 回复  |  直到 6 年前
        1
  •  7
  •   Rene    6 年前

    默认情况下,Kotlin lambda是可序列化的,请参见 https://discuss.kotlinlang.org/t/are-closures-serializable/1620 .

    所以这会起作用:

     val r = { println("Hallo")} as java.io.Serializable
    

    如果您真的需要一个可运行的实例,那么这是行不通的,因为Kotlin只创建一个可运行的实例:

     val r = Runnable { println("Hallo")} as java.io.Serializable
    

    val r = object: Runnable, java.io.Serializable {
        override fun run() :  Unit {
            println("Hallo")
        }
    }