Kotlin Parcelize中出现意外行为

问题描述 投票:0回答:1

我无法理解@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。但它是。

android kotlin parcelable parcel
1个回答
0
投票

你应该在构造函数本身中定义它,它会正常工作。

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

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

apply plugin: 'kotlin-noarg'

有了这个,你可以使用带有空构造函数的类。

我希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.