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

时间:2018-12-11 13:58:01

标签: kotlin nullable

对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

2 个答案:

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

enter image description here