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()
)
编译器给我以下行的错误 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()
)