java.lang.ClassCastException:java.util.LinkedHashMap无法强制转换为X调用时出现错误从泛型类型Json调用Gson时出现X错误

blmhpbnm  于 2022-11-06  发布在  Java
关注(0)|答案(1)|浏览(354)

大家好,我在KotlinAndroid中有此代码,我尝试将JSON字符串解析为数据类,但数据未知,我的意思是数据类是genric类型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应该用于泛型,但有些地方不起作用。

eqzww0vc

eqzww0vc1#

为了解决这个问题,我提供了一个类名,即className:类虽然我使用了genric,但是当有人想使用我的API并调用getValue时,类型是已知的,他可以为get value方法提供类名。

class JsonFeatureFlag<T>(
    key: String,
    @StringRes nameResId: Int,
    category: DevOptionCategory,
    val defaultValue: T
): FeatureFlagV2<T>(key, nameResId, category) {

     fun getValue(className: Class<T>): T {
        val json = FirebaseRemoteConfig.getInstance().getString(key)
        return try {
            Gson().fromJson(json, className)
        } catch (e: Exception) {
            reportInvalidJson(json)
            defaultValue
        }
    }

相关问题