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
相关产品推荐
相关产品推荐

