Вы должны видеть это так.notNull
назначается с true
(результат x != null
).После этой строки нет информации, доступной для компилятора, чтобы установить связь между этим значением и значением n.
По сути, это то же самое, что написать это прямо сейчас:* Вы можете сказать то же самое для
if (x != null) {
val y: Int = x // smart cast works
}
, скажете вы.Верно, но в этом случае компилятор сразу предлагает x в блоке if как ненулевое значение.Вот где он проводит черту.Если вы не остановитесь где-нибудь, у вас будет много выводов, что сделает процесс компиляции менее эффективным.