【发布时间】:2019-08-21 07:39:52
【问题描述】:
给定的断言将因错误而失败
找不到生成的 GenericType 类的 JsonAdapter 构造函数
我如何从T 的具体类型Moshi 中获得正确的类型?
GenericType 类型使用 Kotlin 代码生成 @JsonClass(generateAdapter = true) 注释,Moshi 仅使用 Moshi.Builder().build()。
我可以手动生成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>,只是不适用于没有通用信息的实际类GenericType::class.java。
所以只要我知道G,下面的genericType 就会找到一个适配器:
inline fun <reified G : Any> genericType() =
newParameterizedType(GenericType::class.java, G::class.java)
这个G 是我想在type() 中找到的,因为T::class.java
就是GenericType::class.java 那里。
【问题讨论】:
-
导致崩溃的实际代码是什么?可以加一下吗?
-
这是
adapter<GenericType<String>>()中的一个问题,使用@JsonClass(generateAdapter = true)和Kotlin 代码生成的基本Moshi 配置。
标签: android generics kotlin moshi kotlin-reified-type-parameters