Приведение типа as в Kotlin
Переменная типа родителя не даёт вызывать методы потомка.
Если в runtime там лежит Employee, тип сужают
оператором as:
open class User {
open fun getName(): String = "user"
}
class Employee : User() {
fun getSalary(): Int = 1000
}
fun main() {
val user: User = Employee()
val employee = user as Employee
println(employee.getSalary())
}
Неверное приведение бросает исключение. Безопасный вариант -
as?: при неудаче вернётся null:
fun main() {
val user: User = User()
val employee = user as? Employee
println(employee)
}
После успешной проверки is компилятор сам сужает тип
в той же ветке - отдельный as не нужен:
fun printSalary(user: User) {
if (user is Employee) {
println(user.getSalary())
}
}
Пусть переменная типа User
ссылается на объект класса
Employee.
Приведите переменную к типу
Employee с помощью as
и выведите на экран зарплату
сотрудника.