对Kotlin来说还很陌生-我对为什么感到有些困惑 在此示例中使用let时,“ it”是否仍可为空? 结果,该示例无法编译
错误:(9,20)类型不匹配:推断的类型为Int?但是Int是 预期的
fun main(args: Array<String>) {
val myNewNullableInt: Int? =6
myNewNullableInt.let{
printAnInteger(it)
}
}
fun printAnInteger (integerToPrint: Int){
println(integerToPrint)
}
示例: https://try.kotlinlang.org/#/UserProjects/fnlicstrn4tbmk8gs071vmv4ka/9dd72cr92ikggh3g9qg981h01o
答案 0 :(得分:5)
let {}
不会更改变量的类型。您想要做的就是使其成为null安全的。这是通过?.
访问权限
myNewNullableInt?.let{
printAnInteger(it)
}
答案 1 :(得分:1)
请参见https://kotlinlang.org/docs/reference/null-safety.html
您必须使用写为?.
要仅对非空值执行某些操作,可以使用 安全呼叫接线员以及let:
val listWithNulls: List<String?> = listOf("Kotlin", null) for (item in listWithNulls) { item?.let { println(it) } // prints A and ignores null }
作为第二种选择,您可以使用!!-运算符(小心使用,如果为null,它将抛出NPE)
val myNewNullableInt: Int? =6
myNewNullableInt!!.let{ //throws if myNewNullableInt == null
printAnInteger(it)
}
因为您使用的是非可变的val
,所以也可以使用`if(myNewNullableInt!= null)。 Kotlin将识别空检查并将其自动转换为非空类型。您可以通过AndroidStudio或Idea的绿色标记看到智能广播。
val myNewNullableInt: Int? =6
if(myNewNullableInt != null) {
printAnInteger(myNewNullableInt )
}