Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 在这种情况下,为什么不给我一个不可为空的整数_Kotlin_Nullable - Fatal编程技术网

Kotlin 在这种情况下,为什么不给我一个不可为空的整数

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) } 例如: 让{}不更改变量的类型

对科特林来说相当陌生——我有点不明白为什么 在本例中使用let时,“it”仍然可以为null? 因此,该示例无法编译

错误:(9,20)类型不匹配:推断的类型是Int?但是Int是 期望

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 )
   }