Gson反序列化Map列表时出现‘Not enough information to infer type variable T’错误求助
解决Gson反序列化List<Map<String, Any>>时的类型推断错误
你遇到的问题是Kotlin无法自动推断fromJson方法的泛型参数T——虽然你通过TypeToken指定了类型,但Java的Type对象和Kotlin的泛型系统无法直接完成自动映射,必须显式指定泛型类型。
方案一:显式指定变量类型
直接在变量声明时明确类型,让Kotlin推导出fromJson的泛型参数:
val listType = object : TypeToken<List<Map<String, Any>>>() {}.type val stepsList: List<Map<String, Any>> = Gson().fromJson(resultStr, listType)
方案二:调用时显式指定泛型参数
调用fromJson时直接指定泛型类型,不依赖变量类型推断:
val listType = object : TypeToken<List<Map<String, Any>>>() {}.type val stepsList = Gson().fromJson<List<Map<String, Any>>>(resultStr, listType)
方案三:使用内联reified扩展函数(更简洁)
如果觉得手动创建TypeToken麻烦,可以封装一个内联扩展函数,利用Kotlin的reified特性直接获取泛型类型:
inline fun <reified T> Gson.fromJson(json: String): T { return this.fromJson(json, object : TypeToken<T>() {}.type) }
调用时直接指定泛型即可,无需手动创建TypeToken:
val stepsList = Gson().fromJson<List<Map<String, Any>>>(resultStr)
以上三种方式都能解决“Not enough information to infer type variable T”的错误,本质都是通过显式指定泛型类型,让Kotlin明确fromJson方法要返回的类型。
内容的提问来源于stack exchange,提问作者WeGoToMars
相关产品推荐
相关产品推荐

