首页 > 解决方案 > Kotlin 中的非空检查有什么区别?

问题描述

有一些方法可以在 Kotlin 中完成空值检查:

1.

if(myVar != null) {
    foo(myVar)
}

2.

myVar?.let { 
    foo(it)
}

3.

myVar?.run { 
    foo(this)
}

这些方式有什么区别?

有什么理由(性能、最佳实践、代码风格等)为什么我应该更喜欢其他方式?

标签: kotlinkotlin-null-safety

解决方案


!!是告诉编译器我确定变量的值不为空,如果为空,则抛出空指针异常(NPE),其中为?。是告诉编译器我不确定变量的值是否为空,如果为空,则不要抛出任何空指针。

使用可为空属性的另一种方法是安全调用运算符?。如果属性不为 null,则调用该方法;如果该属性为 null,则返回 null,而不会引发 NPE(空指针异常)。

nullableVariable?.someMethodCall()

推荐阅读