Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpEsInr 72 of 123 menu
◀ ▶

Введение в enum и sealed в Kotlin

Ограниченный набор вариантов часто встречается в программе: статус заказа, день недели, результат запроса, состояние экрана. Если хранить такие значения простой строкой или числом, легко передать лишнее значение и пропустить его при разборе. Kotlin дает два родственных способа описать набор заранее: enum class и sealed class (или sealed interface).

Ключевое слово enum class перечисляет фиксированные константы одного типа. У каждой константы одно имя в коде, все они известны компилятору, их удобно сравнивать и перебирать. Так описывают направления, уровни логирования, режимы, где у варианта нет собственного набора полей или поля одинаковы у всех констант.

Ключевое слово Sealed class тоже ограничивает круг возможных типов, но каждый вариант может нести свои данные: успех с текстом, ошибка с кодом, загрузка без полей. Подтипы объявляют рядом с запечатанным типом, поэтому компилятор знает полный список вариантов так же, как для enum. Это удобно для ответов API, шагов мастера, дерева выражений, где у разных веток разная форма данных.

Оба механизма сочетаются с when и проверкой is так же, как иерархии с open class: если перечислены все варианты, ветку else часто можно не писать, а внутри ветки компилятор сужает тип. Enum удобен, когда нужны только метки без своего набора полей у каждого варианта; sealed - когда подтипы наследуют общий запечатанный тип и несут разные данные через data class, обычный класс или object, по аналогии с абстрактным родителем и конкретными наследниками. Дальше разберём enum от объявления до entries, затем sealed class и sealed interface.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить