Android 可分配的readString()可为空的警告
由于Android Studio的最新更新给了我以下警告: 预期类型在Kotlin中不接受null,但在Java中该值可能为null 此警告显示在以下代码被截断处: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
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
。使用当smart cast无法在运行时检查表达式的易读性,并且您100%确定不存在null
时,code>是可以的。这是一个很好的透视图,说明了为什么您不再需要编写自己的Parseable