Kotlin Parcelize中的意外行为

时间:2019-03-22 07:57:42

标签: android kotlin parcelable parcel

我在理解@Parcelize在Kotlin中的工作方式时遇到了麻烦。根据文档

  

仅主构造函数属性将被序列化。

但是,当我使用空的主承包商对类进行序列化和反序列化时,它仍在对所有字段进行序列化和反序列化。例如,在课程

@Parcelize
class Node(): Parcelable {
    var field: String? = null
}

由于主要承包商没有任何字段,根据文档,我应该始终在ser / des之后加上field = null。但是每当我运行以下代码

val before = Node()
before.field = "someField"

val bundle = Bundle().apply{ putParcelable("someKey", before) }
val after = bundle.getParcelable<Node>("someKey")

field已成功序列化和反序列化,其值为someField。 我是否缺少某些内容?Parcelize是否已更新,但是他们没有更新文档?

顺便说一句,如果我如上所述保留Node声明,Android Studio会警告我field将不会序列化为Parcel。但这是

1 个答案:

答案 0 :(得分:0)

您应该在构造函数中定义它,它将正常工作。

@Parcelize
class Node( var field: String? = null) : Parcelable

要在kotlin中使用空的构造函数,可以在app gradle文件中添加它。

apply plugin: 'kotlin-noarg'

使用此方法,可以将类与空构造函数一起使用。

我希望这会有所帮助。