我无法理解@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
。但它是。
你应该在构造函数本身中定义它,它会正常工作。
@Parcelize
class Node( var field: String? = null) : Parcelable
要在kotlin中使用空构造函数,您可以在app gradle文件中添加它。
apply plugin: 'kotlin-noarg'
有了这个,你可以使用带有空构造函数的类。
我希望这有帮助。