Принудительно использовать ненулевое значение без использования? - PullRequest
0 голосов
/ 01 октября 2019

В Kotlin, если у меня есть следующее:

val html = response.body()?.string()

html будет компилироваться для обнуляемости. Мне нужно передать это функции, которая не допускает обнуления. Есть ли способ передать его (или преобразовать) таким образом, чтобы он не использовался !!

Ответы [ 2 ]

5 голосов
/ 01 октября 2019

Вы можете передать значение по умолчанию, используя оператор elvis:

val html = response.body()?.string() ?: ""
nonNullableFunction(html)

Или вы можете использовать let для его вызова, только если html не равно нулю. Это даст вам обнуляемый результат от функции.

val result = response.body()?.string()?.let { nonNullableFunction(it) }
2 голосов
/ 01 октября 2019

Вы можете использовать ?: для объявления значения по умолчанию, которое будет передано вместо url, если url равно null:

foo(url?: "default value")

Вы также можете поместить это в свое объявление так,html не будет обнуляться:

val html = response.body()?.string()?: "default value"

Как указывал Марстран, вы также можете вызывать свою функцию внутри блока let, поэтому она будет вызываться, только если html не null:

html?.let{ foo(it) }//it is non-null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...