android - Kotlin 数据类和可为空的类型

标签 android kotlin data-class

我是 Kotlin 的新手,我不知道为什么编译器会提示这段代码:

data class Test(var data : String = "data")

fun test(){
  var test: Test? = Test("")
  var size = test?.data.length
}

编译器提示 test?.data.length,它说我应该这样做:test?.data?.length。但是数据变量是String,而不是String?,所以我不明白为什么我要检查时必须放长度。

最佳答案

表达式test?.data.length等价于(test?.data).lengthtest?.data部分可以为空:它是 test.datanull。因此,获取它的 length 不是空安全的,而是应该使用 safe call operator再次:test?.data?.length.

可空性通过整个调用链传播:您必须将这些链编写为 a?.b?.c?.d?.e (这又等同于 (((a?.b)?.c)?.d)?.e),因为如果左侧部分之一为空,则无法执行其余调用,就好像该值为非空。

关于android - Kotlin 数据类和可为空的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42025271/

相关文章:

int - Kotlin 数据类 Gson 序列化问题

java - 使用 proguard 构建应用程序时出现 Android 异常

android - 应用内视频托管的最佳解决方案

Android,Log会降低应用程序速度吗?

android - 如何为小米、红米、三星、华为等创建Android虚拟设备AVD

android - 禁用其他子 fragment 的 View 寻呼机滑动

android - 是否可以在 Room @DAO 中编写返回 LiveData 的 "suspend"函数?

android - 构建类似 CSS 的 Android 微调器动画(Stacked ProgressBar 元素)

inheritance - Kotlin:如何继承数据类中的属性

kotlin - 在 Kotlin 密封类之外引用?