Generics 当当前函数可以';不能在线(但我们有反射)?

Generics 当当前函数可以';不能在线(但我们有反射)?,generics,kotlin,reflection,klaxon,kotlin-reified-type-parameters,Generics,Kotlin,Reflection,Klaxon,Kotlin Reified Type Parameters,让我们假设我们有一个接口,它通过将数据序列化为json来定义数据在某个数据库中的存储 接口存储API{ 暂停趣味商店(键:字符串,值:任意) //内联suspend-fun-get(key:String):T//在接口中不可能具体化,因为我们不能内联它们 suspend-fun-get(key:String,kClass:kClass):T//所以我必须坚持使用其他方法,比如反射。 } 然后我们有一个方法的实现: override suspend-fun-get(键:String,kClass

让我们假设我们有一个接口,它通过将数据序列化为json来定义数据在某个数据库中的存储

接口存储API{
暂停趣味商店(键:字符串,值:任意)
//内联suspend-fun-get(key:String):T//在接口中不可能具体化,因为我们不能内联它们
suspend-fun-get(key:String,kClass:kClass):T//所以我必须坚持使用其他方法,比如反射。
}
然后我们有一个方法的实现:

override suspend-fun-get(键:String,kClass:kClass):T{
val value=//对数据库的一些查询
return Klaxon().parse(value)//编译器显然出错,因为T经历了类型擦除
}
这里我不能使用T,因为它会在运行时进行类型擦除。我有反射,但不知道如何在这个目的中使用它。
Klaxon.parse()
函数不接受KClass来获取类型


有没有什么方法可以绕过这些,或者使一些实用程序在这个目的中使用反射,或者任何其他可能的解决方法?

我很确定,如果你在任何时候打破内联的物化链,开始使用类(
KClass
实例),不幸的是没有回头路了,正是因为你所描述的原因

更糟糕的是,
KClass
不能保存类型参数,因此,如果您的具体化参数是一个
列表,那么您已经在那里丢失了信息—这是不返回具体化的另一个原因

悲哀的结论是,在这种情况下,您可能必须处理
KClass