如何将Kotlin lambda转换为String,然后再转换回lambda



如何将() -> Unit转换为String并转换回可执行方法?到目前为止,我在Kotlin中看到的lambdas是Serializables,这应该是解决方案的一半,但我不知道如何进行转换。

如果唯一的约束是结果是String,那么您实际上可以将函数类型的实例序列化为字节数组,并以任何相反的方式将其转换为String,例如使用Base64对其进行编码。

以下是编码方法:

val f: (Int) -> Int = { it * 2 }
val serialized = ByteArrayOutputStream().run {
ObjectOutputStream(this).apply { writeObject(f) }
toByteArray()
}
val string = Base64.getEncoder().encodeToString(serialized)

以下是如何解码它:

val decoded = Base64.getDecoder().decode(string)
@Suppress("UNCHECKED_CAST")
val deserialized: (Int) -> Int =
ObjectInputStream(ByteArrayInputStream(decoded))
.readObject() as (Int) -> Int

下面是一个完整的可运行示例:(链接(

请注意,为了实现这一点,将字符串解码为函数实例的一侧必须为lambda加载与对其进行编码的一侧相同的类,否则反序列化可能会失败。

最新更新