Умный актерский состав не использует String?в строку после! value.isNullOrBlank () - PullRequest
0 голосов
/ 18 декабря 2018

Я хочу добавить в список объекты, только если у них есть все поля, и попробуйте этот код:

data class Response(val id: String, val name: String)
val list = mutableListOf<Response>()

val id : String? = "test_id"
val name : String? = "test_name"

if (!id.isNullOrBlank() and !name.isNullOrBlank()) {
    list.add(Response(id, name)) // Type mismatch. Required String, Found String?
}

Но я получил ошибку: Type mismatch. Required String, Found String? Какой правильный (и компактный) способсделать это?

Ответы [ 2 ]

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

В качестве рекомендации: всегда старайтесь использовать && вместо побитового and для оценки ваших условий.Редко есть какая-либо причина использовать побитовое and (есть некоторые варианты использования, но в большинстве случаев вы просто хотите иметь кратковременную оценку ваших условий, даже более того, если есть некоторые сложные вычисления / сервисные вызовыв одной из функций).

Из того, что я вижу и ожидаю, умный актерский состав должен работать, тем более что && уже работает.Я не нашел ни одной подходящей или подходящей проблемы, поэтому вы можете открыть новый тикет для этого.

Обратите также внимание, что смарт-каст должен работать из-за KotlinКонтракт , определенный в isNullOrBlank, который в основном проверяет, является ли значение, указанное ниже, null, так что это может быть связано с оценкой контрактов и / или встраиванием функции и / или чего-то из первого в сочетании споразрядно and.

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

Альтернативный подход, который я обычно хотел бы использовать без умных приведений:

val id : String = getId()?.takeIf { it.isNotBlank() } ?: return
val name : String = getName()?.takeIf { it.isNotBlank() } ?: return
list.add(Response(id, name))

Здесь вы проверяете значение во время его получения и прерываете его, если не можете его использовать.

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