Если у меня есть тип с нулевым значением Xyz?
, я хочу ссылаться на него или преобразовать его в тип, не содержащий Nullable Xyz
. Каков идиоматический способ сделать это в Котлине?
Например, этот код находится в ошибке:
val something: Xyz? = createPossiblyNullXyz()
something.foo() // Error: "Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Xyz?"
Но если я сначала проверю null, это допустимо, почему?
val something: Xyz? = createPossiblyNullXyz()
if (something != null) {
something.foo()
}
Как изменить или обработать значение как не null
, не требуя проверки if
, предполагая, что я точно знаю, что это действительно никогда null
? Например, здесь я получаю значение с карты, которую я могу гарантировать, и результат get()
не null
. Но у меня есть ошибка:
val map = mapOf("a" to 65,"b" to 66,"c" to 67)
val something = map.get("a")
something.toLong() // Error: "Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type Int?"
Метод get()
считает возможным, что элемент отсутствует, и возвращает тип Int?
. Таким образом, каков наилучший способ заставить тип значения не иметь значения NULL?
Примечание: этот вопрос намеренно написан автором и автору (Автоответчик), так что идиоматические ответы обычно спросили темы Котлина в SO. Также прояснить некоторые действительно старые ответы, написанные для альфов Котлина, которые не точны для сегодняшнего дня Котлин.