具有一个从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?