Parcelize 抱怨 "Parcelable should be a class" 对象和枚举

Parcelize complains "Parcelable should be a class" on objects and enums

当我尝试用 @Parcelize 注释 enum classobject 时,它会导致错误 'Parcelable' should be a class,这既是编辑器提示,也是编译失败.我可以 @Parcelize 类 就好了,但是我不能做

这样的事情
@Parcelize object MySingletion : Parcelable
@Parcelize enum class Direction : Parcelable { N, E, W, S }

即使 Kotlin 网站 explicitly states 支持对象和枚举,也会发生这种情况。有没有办法解决这个问题,以便我可以 @Parcelize 这些类型的 类?理想情况下,有没有不涉及手动编码 parceler 逻辑的解决方案?

记录的支持意味着,当 class 用作 class 的属性时, 对象和枚举 会得到正确处理 包裹。更重要的是,这两种类型都被隐式排除在使用之外,因为字段必须是在主构造函数中定义的属性:

@Parcelize requires all serialized properties to be declared in the primary constructor. Android Extensions will issue a warning on each property with a backing field declared in the class body. Also, @Parcelize can't be applied if some of the primary constructor parameters are not properties.

如果您只需要将 对象或枚举 用作 属性,则没有问题。如果你想将它用作 Parcelable,你不能绕过自己实现接口,因为这两种类型都是一种单例实现,并且 @Parcelize 只支持具有可访问构造函数和属性的类型.

自 Kotlin 1.2.60 起,CHANGELOG 声明 Parcelize 使用对象和枚举类型。