Имеет 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?