В Kotlin, почему переменная? .IsNotEmpty () показывает ошибку? В то время как переменная !!. IsNotEmpty () работает нормально - PullRequest
0 голосов
/ 17 апреля 2020

Я борюсь с .isNotEmpty и оператором безопасного вызова "?." в Kotlin. Я выучил !!. не рекомендуется в Kotlin и?. лучше. Но когда я использую .isNotEmpty,? делает ошибку и !! запустить без ошибок. Есть ли причина, почему? вызывает ошибку?

Вот код на IntelliJ IDEA 2020.1

fun main(args: Array<String>){

val unkownUser = "unkown User"
val name:String? = readLine()

println("Type the name\n")

if(name!!.isNotEmpty() && name.isNotBlank()) // name?.isNotEmpty()  doesn't work. wonder why
{
    println("$name")
}else{
    println(unkownUser)
}

Ответы [ 2 ]

2 голосов
/ 17 апреля 2020

Для name?.isNotEmpty():

  1. Если name не равно нулю, возвращается Boolean
  2. Если оно равно нулю, возвращается null

В результате тип возвращаемого значения Boolean?, но if() хочет Boolean. Вот почему это не работает.

Однако вы можете сделать: if (name?.isNotEmpty() == true)

1 голос
/ 17 апреля 2020

В качестве инструмента для рисования в среде IDE указывается

Type mismatch.
Required:Boolean
Found:Boolean?

условие, ожидающее логическое, а не логическое или нулевое значение, поэтому вы можете использовать

name?.let {}

или

!name.isNullOrBlank()

как упоминается в комментарии выше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...