Android 可分配的readString()可为空的警告

Android 可分配的readString()可为空的警告,android,android-studio,kotlin,parcelable,parcel,Android,Android Studio,Kotlin,Parcelable,Parcel,由于Android Studio的最新更新给了我以下警告: 预期类型在Kotlin中不接受null,但在Java中该值可能为null 此警告显示在以下代码被截断处: data class Person( @SerializedName("surname") surname : String ) { constructor(parcel: Parcel) : this( parcel.readString() ) //Parceable

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

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

此警告显示在以下代码被截断处:

data class Person(

    @SerializedName("surname")
    surname : String

) { 
    constructor(parcel: Parcel) : this(
        parcel.readString()
    )
    //Parceable implementation
}
有多种方法可以修复此问题,并隐藏此警告:

首先是使值类型为null,这意味着将字符串更改为字符串?

第二是使readString始终返回非空值-readString()


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

事实上,这要容易得多

内部应用程序的
build.gradle

androidExtensions {
    experimental = true
}
然后像这样改变你的课堂:

@Parcelize
data class Person(
    val surname: String
): Parcelable
至于你的问题——实际上没有。处理像您这样的情况的最佳方法是:

  • 要写入
    packet.readString()?:“”
    ,意味着如果结果为null,它将返回空字符串
  • 编写
    parcel.readString()?:抛出IllegalStateException(“发生错误,请执行某些操作”)
    ,这意味着它将抛出一个异常,您根本不必处理任何可为空性

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

    第二种方法是更好的方法,关键是要避免NPE。这样就没有理由使用
    ,因为
    readString
    显然可以生成
    null
    。使用
    null
    时,code>是可以的。这是一个很好的透视图,说明了为什么您不再需要编写自己的
    Parseable