You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

初次使用JSON及Gson时遭遇Unresolved reference: TypeToken错误的问题咨询与解决方案验证

解决Gson TypeToken "Unresolved reference" 错误

刚接触JSON就遇到这个问题确实有点挠头,我来帮你拆解下问题所在,以及你已经找到的解决方案为什么有效:

首先看你原代码里的两个关键点:

  1. 语法错误:你写的object : TypeToken<List<QuizType>>(){}.type()是错的——TypeToken的type是一个属性,不是方法,正确写法应该是.type(去掉后面的括号)。
  2. 可能的依赖问题:如果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,提问作者Вікторія .Палихата

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 18:07:40