gpt4 book ai didi

android - 从 Moshi 类型适配器的具体泛型类型中获取 ParameterizedType

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:56 26 4
gpt4 key购买 nike

由于错误,给定的断言将失败

Failed to find the generated JsonAdapter constructor for class GenericType

如何从具体化的类型中获取正确的类型 T对于 Moshi

GenericType类型用 @JsonClass(generateAdapter = true) 注释仅使用 Moshi.Builder().build()Moshi 使用 Kotlin 代码生成器.

我可以生成 ParameterizedType手动

Types.newParameterizedType(GenericType::class.java, String::class.java)

哪里GenericType::class.java给出 T:class.java .但我不知道如何获得 String类型参数来生成方法。

inline fun <reified T : Any> adapter() =
moshi.adapter<T>(type<T>())

inline fun <reified T : Any> type() =
T::class.java

assert(adapter<GenericType<String>>() != null)

注意适配器适用于任何 GenericType<T> , 只是不适合实际类(class) GenericType::class.java没有通用信息。

所以下面genericType只要我知道 G 就会找到适配器:

inline fun <reified G : Any> genericType() =
newParameterizedType(GenericType::class.java, G::class.java)

G是我要在 type() 中找到的内容, 作为 T::class.java
只是GenericType::class.java那里。

最佳答案

我目前正在使用类似于 Gson 的自定义 TypeToken 方法实现我的目标

abstract class TypeToken<T>

inline fun <reified T : Any> type() = object : TypeToken<T>() {}::class
.java
.genericSuperclass
.let { it as ParameterizedType }
.actualTypeArguments
.first()

但我仍然希望找到一种方法来直接从 T 获取 ParameterizedType

关于android - 从 Moshi 类型适配器的具体泛型类型中获取 ParameterizedType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com