kotlin,如何强制派生自宗宗派生自基类的派生类来实现伴随CREATOR

时间:2019-10-15 17:08:16

标签: kotlin parcelable

具有一个从BaseClass派生的Parcelable,它具有与kotlin配套的CREATOR,可用于从包裹中创建BaseClass

open class BaseClass() : Parcelable {
...
    companion object {
        @JvmField
        val CREATOR: Parcelable.Creator<BaseClass> = object : Parcelable.Creator<BaseClass> {
            override fun createFromParcel(parcel: Parcel): BassClass {
                return BassClass(parcel)
            }

            override fun newArray(size: Int): Array<BaseCl;ass?> {
                return arrayOfNulls(size)
            }
        }
    }
}

现在有一个DerivedClass来自BaseClass,

如果忘记添加自己的伴侣CREATOR,则在还原此DerivedClass实例时,将调用父级的CREATOR,而不创建DerivedClass的实例。

class DerivedClass : BaseClass {
    var stateToSave: Int = 0

    constructor()

    private constructor(parcel: Parcel) : super(parcel) {
        this.stateToSave = parcel.readInt()
    }

    override fun writeToParcel(dest: Parcel, flags: Int) {
        super.writeToParcel(dest, flags)
        dest.writeInt(this.stateToSave)
    }
    /* if forget this it will still compile but will not restore the instance correctly */
    companion object {
        @JvmField
        val CREATOR: Parcelable.Creator<DerivedClass> =
            object : Parcelable.Creator<DerivedClass> {
                override fun createFromParcel(parcel: Parcel): DerivedClass {
                    return DerivedClass(parcel)
                }

                override fun newArray(size: Int): Array<DerivedClass?> {
                    return arrayOfNulls(size)
                }
            }
    }

是否有一种方法可以强制DerivedClass实现其自己的同伴CREATOR?

0 个答案:

没有答案
相关问题