Kotlin数据类出乎意料的结果

时间:2018-03-22 15:35:13

标签: kotlin

我有val字段的数据类

@Parcelize
data class MemberCard(
        val PartnerMembershipId: Int,
        override var MembershipNumber: String? = null,
        override var Name: String? = null,
        var MemberImgUrl: String? = null,
        val TextColorHex: String? = null,
        override var ExpirationDate: Date? = null,
        override var Issuer: String,
        var Notifications: kotlin.Int? = null,
        override var BarcodeType: kotlin.String? = null,
        override var Barcode: kotlin.String? = null,
        val IsPartnerCard: Boolean,
        val Status : String
) : BaseCard {
    val isPending = true//Status=="Pending"
}

由于某些未知原因在运行时我有isPending = false

是一些Kotlin初始化魔术吗?

1 个答案:

答案 0 :(得分:0)

我猜你的@Parcelize有问题。引用:

“@ Parcelize要求在主构造函数中声明所有序列化属性.Android Extensions将在每个属性上发出一个警告,并在类体中声明一个支持字段。此外,如果某些属性,则不能应用@Parcelize主构造函数参数不是属性。“

来源:https://kotlinlang.org/docs/tutorials/android-plugin.html

“在类体中声明的初始化器的属性也很难正确反序列化:我们必须生成一个根本不执行初始化器(包括初始化块)的替代构造函数,并且只使用序列化数据,但这有java.io.Serializable所有与“魔术”对象创建有关的问题。“

来源: https://github.com/Kotlin/KEEP/blob/master/proposals/extensions/android-parcelable.md部分“简单案例:完全自动Parcelable”

因此,我几乎100%确定您需要做的是纠正Parcelable接口实现。