Parcelize数据类添加@RawValue注解报错:该注解不适用于目标参数
解决Parcelize中Any类型字段使用@RawValue的注解目标问题
这个问题我之前踩过坑,其实核心就是注解的目标没指定对,给你一步步说清楚怎么解决:
首先,你遇到的报错“This annotation is not applicable to the target value parameter”,是因为你直接把
@RawValue加在了数据类主构造函数的参数上,而@RawValue注解默认的目标是构造函数参数本身,但它实际需要被应用到属性对应的幕后字段(field)上。解决办法很简单,给注解加上
field:的目标限定符,修改后的代码应该是这样:@Parcelize data class YourDataClass( @field:RawValue var tokenType: Any? = null // 其他字段... ) : Parcelable原理解释:加上
field:之后,编译器就会把@RawValue注解绑定到属性的幕后字段上,这就符合Parcelize对这个注解的使用要求了——此时Parcelize会用writeValue()来序列化这个Any?类型的字段,完美匹配最初的错误提示要求。最后提醒一句:使用
@RawValue时要注意,这个Any类型的实际对象必须是可序列化的(比如实现了Parcelable或Serializable接口),不然运行时会抛出序列化失败的异常,因为writeValue()只能处理支持序列化的对象。
内容的提问来源于stack exchange,提问作者Tarun Deep Attri
相关产品推荐
相关产品推荐

