【发布时间】:2022-01-29 19:10:35
【问题描述】:
您好,我在 Kotlin Android 中有此代码 我尝试将JSON字符串解析为数据类,但数据未知,我的意思是数据类是通用类型T
class JsonFeatureFlag<T>(
key: String,
@StringRes nameResId: Int,
category: DevOptionCategory,
val defaultValue: T
): FeatureFlagV2<T>(key, nameResId, category) {
.....
override fun getValue(): T {
val json = FirebaseRemoteConfig.getInstance().getString(key)
return try {
Gson().fromJson(json, object: TypeToken<T>(){}.type)
} catch (e: Exception) {
reportInvalidJson(json)
defaultValue
}
}
....
}
我收到了这个错误: java.lang.ClassCastException:java.util.LinkedHashMap 无法转换为 X
虽然我知道 TypeToken 应该用于泛型,但有些东西不起作用。
【问题讨论】:
-
由于在运行时进行类型擦除,
T只是java.lang.Object(我假设分别是 Kotlin 的Any)。 Gson 默认反序列化Object为Map。如果您可以更改您的JsonFeatureFlag类以包含T的运行时类,那么您可以直接将该类传递给Gson.fromJson调用。 -
这能回答你的问题吗? Gson, ClassCastException with Generics
-
感谢@Marcono1234,我还阅读了有关类型擦除的信息。我已将其更改为 Gson().fromJson(json, className) 并将 className: Class
传递给方法 -
如果这解决了您的问题,您介意在这个 StackOverflow 问题中添加您自己的答案以表明它已得到回答吗?
-
嗨@Marcono1234 我播下了这个答案stackoverflow.com/questions/25431859/…,但它没有回答我的问题。我没有清单或清单。我的 T 泛型可以是任何类
标签: java android kotlin generics gson