我在理解@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
。但这是
答案 0 :(得分:0)
您应该在构造函数中定义它,它将正常工作。
@Parcelize
class Node( var field: String? = null) : Parcelable
要在kotlin中使用空的构造函数,可以在app gradle文件中添加它。
apply plugin: 'kotlin-noarg'
使用此方法,可以将类与空构造函数一起使用。
我希望这会有所帮助。