在这种情况下,为什么 let 不给我一个不可为空的整数
Why does let not give me a non nullable integer in this case
对 Kotlin 相当陌生 - 我有点困惑为什么
在此示例中使用 let 时 'it' 仍然可以为空?
结果该示例无法编译
Error:(9, 20) Type mismatch: inferred type is Int? but Int was
expected
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
let {}
不会改变变量的类型。你想要做的是让它成为空安全的。这是通过 ?.
访问
完成的
myNewNullableInt?.let{
printAnInteger(it)
}
见https://kotlinlang.org/docs/reference/null-safety.html
您必须使用安全调用运算符,写作 ?.
To perform a certain operation only for non-null values, you can use
the safe call operator together with let:
val listWithNulls: List<String?> = listOf("Kotlin", null)
for (item in listWithNulls) {
item?.let { println(it) } // prints A and ignores null
}
其他选项:
作为第二个选项,您可以使用 !!-运算符(小心使用,如果它为空,它将抛出 NPE)
val myNewNullableInt: Int? =6
myNewNullableInt!!.let{ //throws if myNewNullableInt == null
printAnInteger(it)
}
因为您使用的是非可变 val
,您还可以使用 `if(myNewNullableInt != null)。 Kotlin 将识别 null 检查并自动转换为不可为 null 的类型。 AndroidStudio 或 Idea 的绿色标记可以看到smart-cast。
val myNewNullableInt: Int? =6
if(myNewNullableInt != null) {
printAnInteger(myNewNullableInt )
}
对 Kotlin 相当陌生 - 我有点困惑为什么 在此示例中使用 let 时 'it' 仍然可以为空? 结果该示例无法编译
Error:(9, 20) Type mismatch: inferred type is Int? but Int was expected
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
let {}
不会改变变量的类型。你想要做的是让它成为空安全的。这是通过 ?.
访问
myNewNullableInt?.let{
printAnInteger(it)
}
见https://kotlinlang.org/docs/reference/null-safety.html
您必须使用安全调用运算符,写作 ?.
To perform a certain operation only for non-null values, you can use the safe call operator together with let:
val listWithNulls: List<String?> = listOf("Kotlin", null) for (item in listWithNulls) { item?.let { println(it) } // prints A and ignores null }
其他选项:
作为第二个选项,您可以使用 !!-运算符(小心使用,如果它为空,它将抛出 NPE)
val myNewNullableInt: Int? =6
myNewNullableInt!!.let{ //throws if myNewNullableInt == null
printAnInteger(it)
}
因为您使用的是非可变 val
,您还可以使用 `if(myNewNullableInt != null)。 Kotlin 将识别 null 检查并自动转换为不可为 null 的类型。 AndroidStudio 或 Idea 的绿色标记可以看到smart-cast。
val myNewNullableInt: Int? =6
if(myNewNullableInt != null) {
printAnInteger(myNewNullableInt )
}