首页 > 解决方案 > Parceable readString() 可为空的警告

问题描述

由于最新的更新 Android Studio 给了我以下警告:

预期类型在 Kotlin 中不接受空值,但在 Java 中值可能为空

此警告显示在以下代码片段中:

data class Person(

    @SerializedName("surname")
    surname : String

) { 
    constructor(parcel: Parcel) : this(
        parcel.readString()
    )
    //Parceable implementation
}

有办法修复它,并隐藏此警告:

首先是让值类型可以为空,也就是说把String改成String?.

二是让readString总是返回非空值——readString()!!

我的问题是哪种方法更好。如果值不能为空,readString 是否有可能返回 null?

标签: androidandroid-studiokotlinparcelableparcel

解决方案


实际上要容易得多

内部应用程序build.gradle

androidExtensions {
    experimental = true
}

并像这样更改您的课程:

@Parcelize
data class Person(
    val surname: String
): Parcelable

至于你的问题——实际上没有。处理像您这样的情况的最佳方法是:

  1. parcel.readString() ?: "",意思是如果结果为空,它将返回空字符串
  2. parcel.readString() ?: throw IllegalStateException("Error happened, do something"),这意味着它会抛出一个异常,你根本不必处理任何可空性。

就个人而言,我会坚持选项#1


推荐阅读