Как хранится в памяти sealed class

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

Ответ

Sealed class в Kotlin — это абстрактный класс, который ограничивает возможные наследники. В памяти он хранится так же, как обычный класс, но с дополнительной информацией о типах-наследниках.

Особенности:

  • Все подклассы известны на этапе компиляции.
  • Компилятор генерирует для них when-выражения без else, если все случаи покрыты.
  • В runtime каждый подкласс — это отдельный класс, но с метаданными, связывающими его с родителем.

Пример:

sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
}

fun handle(result: Result) = when (result) {
    is Result.Success -> println(result.data)
    is Result.Error -> println(result.message)
}

Нюансы:

  • Поддерживает data class, object и обычные классы.
  • Нельзя наследовать вне объявленного файла (до Kotlin 1.5 — даже вне модуля).
  • Оптимизирован для when-выражений (если пропущен case — warning/error).