Kotlin 在这种情况下,为什么不给我一个不可为空的整数
对科特林来说相当陌生——我有点不明白为什么 在本例中使用let时,“it”仍然可以为null? 因此,该示例无法编译 错误:(9,20)类型不匹配:推断的类型是Int?但是Int是 期望Kotlin 在这种情况下,为什么不给我一个不可为空的整数,kotlin,nullable,Kotlin,Nullable,对科特林来说相当陌生——我有点不明白为什么 在本例中使用let时,“it”仍然可以为null? 因此,该示例无法编译 错误:(9,20)类型不匹配:推断的类型是Int?但是Int是 期望 fun main(args:Array){ val myNewNullableInt:Int?=6 myNewNullableInt.let{ 打印整合器(it) } } 趣味打印整数(integerToPrint:Int){ println(integerToPrint) } 例如: 让{}不更改变量的类型
fun main(args:Array){
val myNewNullableInt:Int?=6
myNewNullableInt.let{
打印整合器(it)
}
}
趣味打印整数(integerToPrint:Int){
println(integerToPrint)
}
例如:
让{}
不更改变量的类型。您要做的是使其为空安全。这是通过?。
访问完成的
myNewNullableInt?.let{
printAnInteger(it)
}
看
您必须使用安全呼叫接线员,写为?。
要仅对非空值执行特定操作,可以使用
安全呼叫接线员和let:
val listWithNulls: List<String?> = listOf("Kotlin", null)
for (item in listWithNulls) {
item?.let { println(it) } // prints A and ignores null
}
因为您使用的是不可变的val
,所以还可以使用`if(myNewNullableInt!=null)。Kotlin将识别null检查并自动转换为不可为null的类型。你可以通过AndroidStudio或Idea的绿色标记看到smart演员阵容
val myNewNullableInt: Int? =6
if(myNewNullableInt != null) {
printAnInteger(myNewNullableInt )
}
另请注意。。。您需要
?。
,但您可能不需要让在这里。。。如果它只是打印您想要的内容,您可以执行以下操作:myNewNullableInt?。运行(::println)
(或与相同。此外,
)。。。如果你真的想返回或设置一个在给定正文中计算并返回的值,你只需要let
。感谢罗兰,这只是我所做的更复杂事情的一个简化示例。链接和更多信息(随编辑一起提供)。也许这个答案会更清楚,它只会将值强制转换为不可为null的类型,如果它实际上不是null!如果为空,则安全调用?。
运算符将完全绕过let
块。通常这就是你想要的;但是,通过“如果”来思考总是值得的。
val myNewNullableInt: Int? =6
myNewNullableInt!!.let{ //throws if myNewNullableInt == null
printAnInteger(it)
}
val myNewNullableInt: Int? =6
if(myNewNullableInt != null) {
printAnInteger(myNewNullableInt )
}