Kotlin实验版1.2.41中@Parcelize非构造属性序列化警告解决办法
解决@Parcelize中派生属性的序列化警告问题
嘿,这个问题我之前在使用Kotlin的@Parcelize时也碰到过!咱们来一步步拆解解决:
问题原因
@Parcelize的设计逻辑是只自动序列化主构造函数中声明的属性,而你类体里的average是通过lazy委托计算的派生属性,它不在主构造函数里,所以Parcelize会警告你这个属性不会被写入Parcel。但其实在你的场景下,这个警告是“良性”的——因为average完全依赖已被序列化的myList,根本不需要自己被序列化。
解决方案:添加@Transient注解消除警告
你只需要给average属性加上@Transient注解,明确告诉Parcelize:“这个属性不需要被序列化/反序列化,我会自己处理它的初始化”。修改后的代码如下:
@Parcelize data class MyClass(private val myList: List<Stuff>) : Parcelable { @Transient val average: List<DayStat> by lazy { calculateAverage(myList) } }
为什么这样可行?
当你反序列化MyClass实例时:
- 主构造函数里的
myList会被Parcel正确恢复; - 当你第一次访问
average时,lazy委托会自动调用calculateAverage(myList)重新计算出结果,和原实例的average完全一致。
这样既消除了警告,又保留了延迟加载的特性,完美适配你的需求~
内容的提问来源于stack exchange,提问作者Guillaume agis
相关产品推荐
相关产品推荐

