首页 > 解决方案 > Kotlin - Parcelable 类型不匹配:必需:字符串,找到:字符串?

问题描述

编译器在Parcelable 数据类的构造函数内部和Type mismatch: Required: String, Found: String?行 给我错误。parcel.writeString(firstName)parcel.writeString(lastName)

这是我的课。

data class Mouse(
val firstName: String,
val lastName: String,
val age: Int ) : Parcelable {
constructor(parcel: Parcel) : this(
    parcel.readString(),
    parcel.readString(),
    parcel.readInt()
)

override fun writeToParcel(parcel: Parcel, flags: Int) {
    parcel.writeString(firstName)
    parcel.writeString(lastName)
    parcel.writeInt(age)
}

override fun describeContents(): Int {
    return 0
}

companion object CREATOR : Parcelable.Creator<Mouse> {
    override fun createFromParcel(parcel: Parcel): Mouse {
        return Mouse(parcel)
    }

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

我不明白为什么会出现错误以及如何纠正它。

标签: android-studiokotlinparcelable

解决方案


实际上,您的错误是由其他行引起的。parcel.readString()return ,然后您尝试将其作为具有类型的参数String?传递给您的主构造函数。要修复它,例如,如果返回的字符串为空,您可以传递一个默认值:firstNameString

constructor(parcel: Parcel) : this(
    parcel.readString() ?: "",
    parcel.readString() ?: "",
    parcel.readInt()
)

推荐阅读