Sealed иерархия ограничивает набор подтипов в одном модуле; when по sealed может быть исчерпывающим без else.
Разбор
- Идеально для UI-state:
Loading / Content / Error.
- С Kotlin 1.5+
sealed interface.
- Подтипы — в том же package/module (с оговорками версий).
- Компилятор предупредит о незакрытой ветке при добавлении нового подтипа.
Пример
sealed interface UiState {
data object Loading : UiState
data class Data(val items: List<String>) : UiState
data class Error(val msg: String) : UiState
}
Итог
Sealed — типобезопасный sum-type для состояний и результатов.