Назад к задачам
Junior — Middle+
8

Пример применения sealed‑класса для описания разных состояний

Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

Продемонстрировать, как с помощью sealed‑класса можно моделировать набор возможных состояний объекта. Нужно показать объявление sealed‑класса и несколько его наследников, каждый из которых представляет отдельное состояние, а также пример использования в условном операторе when (или аналогичном) без необходимости добавлять else‑ветку, поскольку компилятор проверит покрытие всех вариантов.

sealed class UiState {
    object Loading : UiState()
    data class Success(val data: List<String>) : UiState()
    data class Error(val cause: Throwable) : UiState()
}

fun render(state: UiState) {
    when (state) {
        is UiState.Loading -> println("Loading...")
        is UiState.Success -> println("Data: ${state.data}")
        is UiState.Error   -> println("Error: ${state.cause.message}")
    }
}

В примере показано, как sealed‑класс гарантирует исчерпывающий набор вариантов и упрощает работу с различными состояниями в коде.