Nis*_*nth 7 kotlin kotlin-android-extensions kotlin-interop kotlin-null-safety
请使用以下使用安全呼叫运算符(?.)的示例:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我们需要在sampleB上安全调用操作符.但是为什么我们需要sampleC上的安全调用操作符.如果我删除该运算符,它不会编译.
根据我对运算符的理解,如果sampleB为null,则该行返回null.如果sampleB不为null,我们可以确定sampleC不是null,基于它的类型.但为什么Kotlin会对sampleC强制安全调用操作符?
A().sampleB?.sampleC?.sampleInt
Run Code Online (Sandbox Code Playgroud)
解析为
((A().sampleB)?.sampleC)?.sampleInt
Run Code Online (Sandbox Code Playgroud)
类型是
A(): A
A().sampleB: B?
(A().sampleB)?.sampleC: C?
((A().sampleB)?.sampleC)?.sampleInt: Int?
Run Code Online (Sandbox Code Playgroud)
因为之前的类型sampleC是a B?,所以?.是必需的.
| 归档时间: |
|
| 查看次数: |
762 次 |
| 最近记录: |