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

如何在Kotlin中使用Retrofit的@Tag注解处理基本数据类型?

解决Retrofit @Tag注解处理Kotlin基本数据类型的类型转换异常

当在Kotlin中使用Retrofit的@Tag注解标注基本数据类型参数时,会触发ClassCastException,错误表现为java.lang.Boolean无法转换为boolean、java.lang.Integer无法转换为int。

解决方案

将@Tag标注的基本数据类型参数改为对应的可空包装类型,示例修改后的代码如下:

@POST("/api")
suspend fun post(
    @Tag a: Boolean?,
    @Tag b: Int? = null,
    ...
)

原因说明

Retrofit处理@Tag参数时,会调用OkHttp的Request.Builder.tag(Class<?> type, Object tag)方法存储标签。Kotlin的非空基本数据类型会自动装箱为Java包装类对象,但Retrofit会尝试用基本类型的Class(如boolean.class、int.class)进行类型转换,而基本类型Class无法直接转换包装类对象,因此抛出异常。改用可空包装类型后,Retrofit会使用包装类的Class(如Boolean.class、Integer.class)匹配存储的对象,避免类型转换错误。

内容的提问来源于stack exchange,提问作者Some Noob Student

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 04:52:48