我是Kotlin的新手,我不知道为什么编译器会抱怨这段代码:
data class Test(var data : String = "data") fun test(){ var test: Test? = Test("") var size = test?.data.length }
编译器抱怨测试?.data.length,它说我应该这样做:test?.data?.length.但是数据变量是String,而不是String?,所以我不明白为什么我要把它?当我想检查长度.
解决方法
表达式test?.data.length等价于(test?.data).length,测试?.data部分可以为空:它是test.data或null.因此,获取其长度并不是零安全的,而是应该再次使用
safe call operator:test?.data?.length.
可空性通过整个调用链传播:你必须将这些链写成?.b?.c?.d?.e(再次等同于(((a?.b)?. c) ?.)).e),因为,如果其中一个左边部分为空,则不能执行其余的调用,就像该值不为null一样.