我是 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).length
,test?.data
部分可以为空:它是 test.data
或 null
。因此,获取它的 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/