Приведи пример реализации разных состояний с помощью Sealed Class

«Приведи пример реализации разных состояний с помощью Sealed Class» — вопрос из категории Kotlin, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

sealed class Resource<out T> {
    data class Success<T>(val data: T) : Resource<T>()
    data class Error(val exception: Exception) : Resource<Nothing>()
    object Loading : Resource<Nothing>()
}

// Использование
fun loadData() {
    when (val result = fetchData()) {
        is Resource.Success -> showData(result.data)
        is Resource.Error -> showError(result.exception)
        Resource.Loading -> showLoading()
    }
}

private fun fetchData(): Resource<String> {
    return try {
        Resource.Success("Data loaded")
    } catch (e: Exception) {
        Resource.Error(e)
    }
}

Sealed class идеально подходит для представления ограниченного набора состояний. В примере показаны три возможных состояния загрузки данных: успех, ошибка и процесс загрузки. Кейсы обрабатываются через when-expression, что обеспечивает безопасность типов (компилятор проверит все варианты).