Скажем, у меня есть простой класс Foo
с обнуляемым String?
data class Foo(
val bar: String?
)
и я создаю простую функцию capitalize
fun captitalize(foo: Foo) = when {
foo.bar != null -> runCatching { foo.bar.capitalize() }
else -> ""
}
что отлично работает, потому что компилятор делает вывод, что foo.bar не может иметь значение NULL, хотя его тип допускает значение NULL. Но потом я решил написать такую же функцию как расширение Foo
fun Foo.captitalize2() = when {
bar != null -> runCatching { bar.capitalize() }
else -> ""
}
и внезапно компилятор больше не может сделать вывод, что bar не является нулевым, и IntelliJ сообщает мне, что «только безопасные (?.) или ненулевые утвержденные (!!.) вызовы разрешены для приемника типа, допускающего значение NULL. Нить?"
Кто-нибудь может объяснить почему?