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

Retrofit调用报ClassCastException:Class无法转为ParameterizedType求助

问题描述

代码示例

调用API的代码:

val profile: UserProfile = userApi.profile()

Retrofit接口定义:

@GET("users/profile")
suspend fun profile(): UserProfile

报错信息

java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType

背景及环境

  • 更新Gradle、依赖库、Kotlin版本和Android Studio后出现问题,此前代码正常运行,后端无改动
  • 所有API调用均出现该问题,并非个例
  • 相关版本:
    retrofitVersion = 2.9.0
    kotlinVersion = 1.8.10
    gradle = 8.0
    
解决方案

1. 升级Retrofit版本

Retrofit 2.9.0对Kotlin 1.8+和Gradle 8.0的兼容性不足,建议升级到2.9.0以上的稳定版本(比如2.10.0或更高),新版本修复了高版本Kotlin、Gradle下的反射相关兼容问题。

2. 清理并同步构建缓存

升级依赖后,执行./gradlew clean命令清理构建缓存,再重新同步Gradle项目,避免旧缓存导致的异常。

3. 检查Retrofit实例构建代码

确保Retrofit接口实例的创建是标准写法,避免手动反射操作引发类型转换错误:

val retrofit = Retrofit.Builder()
    .baseUrl(BASE_URL)
    .addConverterFactory(GsonConverterFactory.create())
    .build()

val userApi = retrofit.create(UserApi::class.java)

4. 临时禁用Kotlin泛型签名优化

如果上述方案无效,可在模块的build.gradle中添加以下配置,避免编译器擦除泛型类型信息:

android {
    kotlinOptions {
        freeCompilerArgs += "-Xno-parametric-signatures"
    }
}

内容的提问来源于stack exchange,提问作者marius pop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:34:54