Kotlin - Parcelable 类型不匹配:必需:字符串,找到:字符串?

Kotlin - Parcelable Type mismatch: Required: String, Found: String?

编译器给我以下行的错误 Type mismatch: Required: String, Found: String? parcel.writeString(firstName)parcel.writeString(lastName) 在 Parcelable 数据 class.

的构造函数中

这是我的class。

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)
    }
}}

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

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

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