В чем разница между операторами as и as?

«В чем разница между операторами as и as?» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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

Основные различия:

  1. as выбрасывает исключение при неудаче, as? возвращает null
  2. as возвращает non-null тип, as? возвращает nullable-тип
  3. as? безопаснее, так как избегает исключений