Kotlin从意图捆绑getParcelableArray不能将其转换为自定义类型

我遇到了一个奇怪的问题。 我有一个类,它在kotlin中实现Parcelable接口。

我从一个活动传递类A的数组到另一个没有问题在这里。

var arrayOfA:Array<A> // just to tell the type assume the array is initialised with the value intent.putExtra("array", arrayOfA) 

但是,在另一个活动中接收它时,我不能将它分配给Array类型的变量,它要求将它分配给数组,当A在类型parcelable时,为什么我无法为其分配变量。

 in second Activity var arrayOfA:Array<A>?=null arrayA=intent.get("array") as Array<A> // Problem here. Class cast exception 

我无法理解为什么。 有人能帮我吗? 我不想将变量类型更改为Array,因为它有许多相互依赖性(这里的类只是一个示例)

========================================

 class A(val a:String?,val b:String?):Parcelable { constructor(parcel: Parcel) : this( parcel.readString(), parcel.readString()) { } override fun writeToParcel(parcel: Parcel, flags: Int) { parcel.writeString(a) parcel.writeString(b) } override fun describeContents(): Int { return 0 } companion object CREATOR : Parcelable.Creator<A> { override fun createFromParcel(parcel: Parcel): A { return A(parcel) } override fun newArray(size: Int): Array<A?> { return arrayOfNulls(size) } } } 

您需要使用getParcelableArrayExtra来检索getParcelableArrayExtra对象

 arrayA = intent.getParcelableArrayExtra("array") as Array<A?> 

使class A成为Nullable全部,因为你不能在Kotlin中抛出NullableNon Nullable

创建者应该像下面一样

 companion object CREATOR : Parcelable.Creator<A?> { override fun createFromParcel(parcel: Parcel): A? { return A(parcel) } override fun newArray(size: Int): Array<A?> { return arrayOfNulls(size) } }