初次使用JSON及Gson时遭遇Unresolved reference: TypeToken错误的问题咨询与解决方案验证
解决Gson TypeToken "Unresolved reference" 错误
刚接触JSON就遇到这个问题确实有点挠头,我来帮你拆解下问题所在,以及你已经找到的解决方案为什么有效:
首先看你原代码里的两个关键点:
- 语法错误:你写的
object : TypeToken<List<QuizType>>(){}.type()是错的——TypeToken的type是一个属性,不是方法,正确写法应该是.type(去掉后面的括号)。 - 可能的依赖问题:如果IDE还是提示“Unresolved reference”,大概率是项目里没正确引入Gson的依赖,导致找不到
TypeToken这个类。
下面给你梳理几种可行的解决方式:
方式1:修正TypeToken用法并确认依赖
- 先确保你的Module级别的
build.gradle(或build.gradle.kts)里添加了Gson依赖:dependencies { implementation 'com.google.code.gson:gson:2.10.1' // 建议用最新稳定版 } - 然后修正代码中的语法问题:
val myType: Type = object : TypeToken<List<QuizType>>(){}.type val quiz: List<QuizType> = gson.fromJson(json, myType)
方式2:用你已经成功的Kotlin typeOf 方案
从Kotlin 1.7.0开始,标准库提供了typeOf方法,能更简洁地获取Type,完全不需要依赖Gson的TypeToken,写法更符合Kotlin风格:
import kotlin.reflect.typeOf // 在onCreate里直接使用 val myType = typeOf<List<QuizType>>().javaType val quiz: List<QuizType> = gson.fromJson(json, myType)
这个方法避免了匿名内部类的样板代码,确实是个更优雅的选择。
方式3:切换到Moshi(可选优化)
如果你觉得Gson的类型处理有点繁琐,Moshi是个对Kotlin更友好的JSON库,它原生支持Kotlin数据类,不需要手动处理TypeToken:
// 先添加依赖 // implementation 'com.squareup.moshi:moshi:1.14.0' // implementation 'com.squareup.moshi:moshi-kotlin:1.14.0' val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build() val adapter = moshi.adapter<List<QuizType>>() val quiz: List<QuizType>? = adapter.fromJson(json)
Moshi的API更简洁,还能避免很多Gson在Kotlin里的兼容性小问题。
总结一下,你遇到的错误要么是依赖没配好,要么是把type属性当成方法调用了。你用typeOf的解决方案完全没问题,要是想进一步简化JSON解析流程,试试Moshi也不错~
内容的提问来源于stack exchange,提问作者Вікторія .Палихата
相关产品推荐
相关产品推荐

