实际上,主要问题仍然是 Kotlin 中的类没有具体的类型参数。但这就是为什么在这种特定情况下这让我感到困扰:
假设您有一个包装类Wrapper
,它接收一个字符串content
和一个类* type
,并且可以通过调用函数输出type
通过解析content
为 JSON检索到的类对象getObj()
:
class Wrapper<T>(private val content: String, /*private val type: KClass<*>*/) {
fun getObj(): T {
// ?
}
}
我想使用 kotlinx.serialization。现在,您可能已经注意到我之前是如何在“class”后面加上星号的。原因如下:是的,Wrapper
必须以某种方式学习目标课程,但如何?它应该只是类型参数(因为类型erausre而不起作用)还是KClass
引用(因为我需要一个具体的类型参数而不起作用)?
问题是,据我所知,将通用 JSON 解码为可序列化目标类的唯一方法是使用Json.decodeFromString<T>(content)
,其中T
是目标类型,content
是 JSON 字符串。现在,T
被定义为具体化(以便可以在运行时处理该类型)并且只能用另一个具体化的类型参数或实际的类引用来填充。我不能使用另一个具体化的类型参数,因为我在一个类的上下文中,一个类不能有具体化的类型参数。我也不能使用实际的类引用,因为类的用户应该能够用不同的目标来构造它,例如他们决定目标是什么,而不是我。
那么,如何使用 kotlinx.serialization 来做到这一点?甚至可能吗?