Ответ
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).