Исключительная проверка нуля в внутренней функции расширения

Когда у меня есть неизменный val необязательный, компилятор отслеживает информацию о проверке, которую я выполнил для null, и может обрабатывать переменную как ненулевую и вызывать ее непосредственно в условии if.

val s: String? = "test"

if (s != null) {
   s.startsWith("3") // This works
}

if (!s.isNullOrEmpty()) {
    s.startsWith("3") // Not working
}

Возможно ли выполнить эту проверку в функции расширения и сохранить компилятор в курсе этого?

+2
источник поделиться
1 ответ

Это еще не доступно в Котлине.

Существует функция "Контракты", которая в настоящее время разрабатывается на JetBrains (https://discuss.kotlinlang.org/t/status-of-kotlin-internal-contracts/6392) - она похожа на то, что они сделали с их собственный аннотация @Contract для Java-кода, но будет иметь поддержку от компилятора.

Тем не менее, это на ранних стадиях, и еще нет даты выхода.

+4
источник

Посмотрите другие вопросы по метке или Задайте вопрос