android - 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?
解决方案
实际上要容易得多
内部应用程序build.gradle
androidExtensions {
experimental = true
}
并像这样更改您的课程:
@Parcelize
data class Person(
val surname: String
): Parcelable
至于你的问题——实际上没有。处理像您这样的情况的最佳方法是:
- 写
parcel.readString() ?: ""
,意思是如果结果为空,它将返回空字符串 - 写
parcel.readString() ?: throw IllegalStateException("Error happened, do something")
,这意味着它会抛出一个异常,你根本不必处理任何可空性。
就个人而言,我会坚持选项#1
推荐阅读
- html - 如何将一个网站嵌入另一个网站?
- mongodb - 如何在 MongoDB 中更新具有两个日期差异的列?
- c++ - 使用带有光电传感器和“切换器”的步进电机
- python - 在最接近点的线上绘制一个点
- assembly - 将空格打印到 8086 程序集中的每个输入
- database - MongoDB - 仅获取已填充文档的数组中的第一项 - 例如 user.populate('posts', 'images.0')
- json - 从雪花中的嵌套变体/JSON 列中提取数据
- javascript - Angular 子组件路由失败?
- clojure - 最接近 clojure 的 core.async 的通用 lisp libset
- laravel - laravel 父 * 和 * 子模型中的属性总和?