如何将 () -> 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/