Ответ
В Kotlin есть два оператора приведения типов: as и as?.
as - оператор безопасного приведения, выбрасывает ClassCastException, если приведение невозможно:
val any: Any = "Hello"
val str: String = any as String // OK
val num: Int = any as Int // ClassCastException
as? - оператор безопасного приведения с null-результатом при неудаче:
val any: Any = "Hello"
val str: String? = any as? String // String
val num: Int? = any as? Int // null
Основные различия:
asвыбрасывает исключение при неудаче,as?возвращает nullasвозвращает non-null тип,as?возвращает nullable-типas?безопаснее, так как избегает исключений