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

