Запечатанные классы (sealed classes) используются для представления ограниченных иерархий наследования, где все возможные подклассы известны на этапе компиляции.
Основные особенности:
- Все прямые наследники должны находиться в том же файле, что и запечатанный класс (до Kotlin 1.5). Начиная с Kotlin 1.5, они могут быть в любом файле той же компиляции.
- Наследники запечатанного класса могут быть обычными классами, data-классами, object-декларациями или другими запечатанными классами.
- Конструктор запечатанного класса по умолчанию приватный; другие модификаторы (public, protected, internal) не разрешены.
- Позволяют использовать исчерпывающий (
exhaustive) анализ в when-выражениях, что гарантирует обработку всех возможных вариантов и устраняет необходимость в else-ветке.
Пример использования для моделирования состояния пользовательского интерфейса:
kotlin
Использование в when-выражении:
kotlin
Преимущества:
- Безопасность типа: компилятор проверяет, что все возможные подклассы обработаны.
- Читаемость:ชัดко показывает, какие варианты данных или состояний могут быть.
- Удобство: упрощает работу с
when-выражениями.