Неожиданное поведение в Kotlin Parcelize - PullRequest
0 голосов
/ 22 марта 2019

У меня проблемы с пониманием того, как @Parcelize работает в Котлине.Согласно документации

будут сериализованы только основные свойства конструктора.

Но когда я сериализую и десериализирую классы с пустыми первичными подрядчиками, он все еще сериализует и десериализует всеполя.Например, ниже класса

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

Поскольку у основного подрядчика нет никаких полей, согласно документации, я должен иметь field = null всегда после ser / des.Но всякий раз, когда я запускаю приведенные ниже коды,

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 голосов
/ 22 марта 2019

Вы должны определить его в самом конструкторе, и он будет работать просто отлично.

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

И чтобы использовать пустые конструкторы в kotlin, вы можете добавить это в файл приложения gradle.

apply plugin: 'kotlin-noarg'

При этом вы можете использовать классы с пустыми конструкторами.

Надеюсь, это поможет.

...