【问题标题】:Parcelize complains "Parcelable should be a class" on objects and enumsParcelize 在对象和枚举上抱怨“Parcelable 应该是一个类”
【发布时间】:2018-07-09 20:04:27
【问题描述】:

当我尝试用@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 逻辑的解决方案?

【问题讨论】:

    标签: android kotlin parcelable kotlin-android-extensions


    【解决方案1】:

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

    【讨论】:

    • 是的,我可以确认这是可行的:@Parcelize enum class MyEnum : Parcelable {A,B}
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      • 2010-10-07
      • 2017-08-30
      • 1970-01-01
      相关资源
      最近更新 更多