刚刚学习了替换操作的KotlinNullable
类型和功能。let{}
if (xx != null) {}
但是我感到困惑的一件事是,我们都知道并且我认为编译器应该知道,当我们使用时let{}
,调用此函数的变量/对象可能为空,但是编译器仍然要求我添加安全调用运算符“ ?” 在变量名之后,而不是像在if (xx != null) {}
. 为什么?
我的一段代码:
fun main() {
var number1: Int? = null
//val number2 = number1.let { it + 1 } ?: 10 //doesn't work, not quite "smart"
val number2 = number1?.let { it + 1 } ?: 10 //works, must have "?"
println(number1)
println(number2)
}