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

Kotlin带@Parcelize的数据类传函数引发序列化错误,如何排除函数?

如何让@Parcelize数据类中的函数不参与序列化

嘿,你其实已经找对正确的解决办法啦!

在使用Kotlin的@Parcelize注解实现Parcelable序列化时,要排除某个成员不参与序列化,@IgnoredOnParcel就是专门为此设计的注解。

你的实现完全正确

看你给出的代码,已经给onClick这个函数类型的成员加上了@IgnoredOnParcel,这正是正确的做法:

@Parcelize
data class GearCategoryViewModel(
    val title: String,
    val imageUrl: String,
    val categoryId: Int,
    val comingSoon: Boolean,
    @IgnoredOnParcel val onClick: (gearCategoryViewModel: GearCategoryViewModel) -> Unit
) : DataBindingAdapter.ListItem // 补全你省略的父类部分

为什么这个注解能生效?

@Parcelize会自动帮你生成Parcelable所需的writeToParcel和createFromParcel逻辑,但它只会处理没有被@IgnoredOnParcel标记的成员。而函数类型(比如你的onClick是一个lambda)本身无法被序列化(因为函数对象承载的是执行逻辑,不是可持久化的数据),所以必须用这个注解把它排除在外,否则编译阶段就会抛出序列化相关的错误。

额外提醒

  • 确保你的GearCategoryViewModel类已经正确关联了Parcelable接口——不过别担心,@Parcelize注解会自动帮你实现这个接口,只要你在类上标注了它就行。
  • 后续如果要添加其他不需要序列化的成员(比如自定义的不可序列化对象、工具函数等),都可以用@IgnoredOnParcel来标记,用法和这个函数完全一致。

内容的提问来源于stack exchange,提问作者Felipe Ribeiro R. Magalhaes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:59:30