kotlin - 如何将 Kotlin lambda 转换为 String 然后再转换回 lambda?

标签 kotlin serialization lambda

如何将 () -> Unit 转换为字符串并返回可执行方法?到目前为止,我在 Kotlin 中看到的 lambda 是可序列化的,这应该是解决方案的一半,但我不知道如何进行这种转换。

最佳答案

如果唯一的约束是结果是一个String,那么你实际上可以serialize the instance of the function type to a byte array并以任何方式将其转换为 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

这是一个完整的可运行示例:(link)

请注意,要使其正常工作,将字符串解码为函数实例的一侧必须为 lambda 加载与编码它的一侧相同的类,否则反序列化可能会失败。

关于kotlin - 如何将 Kotlin lambda 转换为 String 然后再转换回 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63813967/

相关文章:

c++ - 逐成员连载

gradle - IntelliJ Kotlin 多平台项目 Gradle 同步很长

java - 基于垂直搜索栏调整图像大小?

json - 为什么我无法使用 Kotlin 从资源文件夹中读取 json 文件?

c# - 将对象序列化为字符串

java - IntStream rangeClosed 无法返回 int 以外的值

android - 在 Kotlin 上将 JSON 字符串解析为 JsonObject/Map/MutableMap

java - 如何序列化一个包含 ObservableList 的对象?

python - Python 中的代码块

C# Lambda 函数 : returning data