Smart cast — это возможность компилятора Kotlin, которая автоматически приводит переменную к проверенному типу в области видимости, где условие is остаётся верным, избавляя от необходимости явного приведения типов.
Когда ты выполняешь проверку типа is, компилятор гарантирует тип переменной внутри этой ветки и обращается с ней соответствующим образом:
fun process(obj: Any) {
if (obj is String) {
println(obj.length) // obj автоматически приводится к String
}
}
val или локальная var, которую компилятор может доказанно не изменяетvar на уровне класса), так как её может изменить другой потокwhen, делая исчерпывающую обработку типов чистой и лаконичнойfun describe(obj: Any) {
when (obj) {
is String -> println(obj.length) // smart cast к String
is Int -> println(obj * 2) // smart cast к Int
}
}
as после проверок типовSmart cast отличается от явного приведения с использованием as, которое выбрасывает ClassCastException во время выполнения, если приведение не удаётся. Smart cast проверяется компилятором и применяется только когда тип уже доказанно безопасен.
Smart cast автоматически применяется к изменяемым свойствам класса после проверки is, потому что компилятор может отследить все модификации в одной области видимости.
Новый — ещё не проверен сообществом
Вы