Parcelize 在对象和枚举上抱怨“Parcelable 应该是一个类”

Leo*_*Aso 5 android parcelable kotlin kotlin-android-extensions

当我尝试注释 anenum classobjectwith 时@Parcelize,它会导致错误'Parcelable' should be a class,既作为编辑器提示,也作为编译失败。我可以@Parcelize上课,但我不能做这样的事情

@Parcelize object MySingletion : Parcelable
@Parcelize enum class Direction : Parcelable { N, E, W, S }
Run Code Online (Sandbox Code Playgroud)

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

vey*_*dan 8

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


tyn*_*ynn 5

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

@Parcelize要求在主构造函数中声明所有序列化属性。Android 扩展将在每个属性上发出警告,并在类主体中声明一个支持字段。此外,@Parcelize如果某些主要构造函数参数不是属性,则无法应用。

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