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

时间:2018-07-09 20:04:27

标签: android kotlin parcelable kotlin-android-extensions

当我尝试用enum class注释object@Parcelize时,会导致错误'Parcelable' should be a class,这既是编辑器提示也是编译失败。我可以@Parcelize上课,但是我不能做类似的事情

@Parcelize object MySingletion : Parcelable
@Parcelize enum class Direction : Parcelable { N, E, W, S }

即使Kotlin网站explicitly states支持对象和枚举,也会发生这种情况。有没有一种方法可以解决此问题,以便可以@Parcelize这些类型的类?理想情况下,是否存在不涉及手动编码包裹程序逻辑的解决方案?

2 个答案:

答案 0 :(得分:4)

有据可查的支持意味着,对象和枚举在用作已分类的的属性时可以正确处理。更重要的是,这两种类型都被隐式地排除在用法之外,因为这些字段必须是在主构造函数中定义的属性:

  

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

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

答案 1 :(得分:3)

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