以下面使用安全调用运算符 (?.) 的示例为例:
class Sample {
class A(
val sampleB: B? = B()
)
class B(
val sampleC: C = C()
)
class C(
val sampleInt: Int = 1
)
fun test() {
val intInC: Int? = A().sampleB?.sampleC?.sampleInt
}
}
我了解我们需要在 sampleB 上使用安全的呼叫操作员。但是为什么我们需要sampleC 上的安全调用运算符。如果我删除该运算符,它不会编译。
根据我对运算符的理解,如果 sampleB 为 null,则该行返回 null。如果 sampleB 不为空,我们可以根据它的类型确定 sampleC 不为空。但是为什么 Kotlin 会在 sampleC 上强制使用安全调用运算符?