Kotlin - Несовпадение типов: Требуется: строка, Найдено: строка? - PullRequest
0 голосов
/ 10 февраля 2020

Компилятор выдает мне ошибку Type mismatch: Required: String, Found: String? для строк parcel.writeString(firstName) и parcel.writeString(lastName) внутри конструктора класса данных Parcelable.

Вот мой класс.

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

Я не понимаю, почему произошла ошибка и как ее исправить.

1 Ответ

2 голосов
/ 10 февраля 2020

На самом деле, ваша ошибка вызвана другими строками. parcel.readString() возвращает String?, и вы пытаетесь передать его первичному конструктору как параметр firstName, который имеет тип String. Чтобы это исправить, вы можете, например, передать значение по умолчанию, если возвращаемая строка равна нулю:

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