Почему в этом случае не давайте мне целое число - PullRequest
0 голосов
/ 11 декабря 2018

Совершенно новичок в 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 голосов
/ 11 декабря 2018

См. 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
}

Другие опции:

В качестве второго варианта вы можете использовать оператор !! - (используйте с осторожностью, он будетбросить 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

0 голосов
/ 11 декабря 2018

let {} не меняет тип переменной.То, что вы хотите сделать, это сделать его нулевым.Это делается с помощью ?. доступа

myNewNullableInt?.let{
    printAnInteger(it)
}
...