首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当当前函数不能内联(但我们有Reflections)时,如何将实例化的参数传递给其他函数?

当当前函数不能内联(但我们有Reflections)时,如何将实例化的参数传递给其他函数?
EN

Stack Overflow用户
提问于 2020-04-28 16:38:42
回答 1查看 94关注 0票数 0

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

代码语言:javascript
复制
interface StorageApi {
    suspend fun store(key: String, value: Any)
    // inline suspend fun <reified T: Any> get(key: String): T // reification is not possible in interfaces since we can't inline them
    suspend fun <T: Any> get(key: String, kClass: KClass<T>): T // so I have to stick with some other way, like reflection.
}

然后我们有一个方法的实现:

代码语言:javascript
复制
override suspend fun <T : Any> get(key: String, kClass: KClass<T>): T {
    val value = // some query to database
    return Klaxon().parse<T>(value) // obviously error by compiler since T goes through type-erasure
}

这里我不能使用T,因为它会在运行时通过类型擦除。我有反射,但不知道如何使用它来达到这个目的。Klaxon.parse()函数不接受用于获取类型的KClass。

有没有办法绕过这些,或者制作一些实用工具来使用反射来达到这个目的,或者任何其他可能的变通方法?

EN

回答 1

Stack Overflow用户

发布于 2020-04-28 17:00:51

我非常确定,如果您在任何时候打破内联具体化链,并开始使用类(即KClass实例),不幸的是,由于您所描述的原因,将无法回头。

更糟糕的是,KClass不能保存类型参数,所以如果你的实例化参数是一个List<Something>,那么你已经丢失了那里的信息--这是不能回到实例化的另一个原因。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61475997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档