Sobes.tech
Back to questions
Junior — Middle
79

В каких случаях предпочтительно использовать sealed class вместо enum в Kotlin?

Answer from AI

sobes.tech AI

Sealed class в Kotlin предпочтительнее enum, когда нужно описать ограниченное множество типов с разной структурой данных и поведением, а не просто набор констант.

Отличия и когда использовать sealed class:

  • Разные данные у вариантов: В enum все элементы — однотипные константы, а sealed class позволяет каждому подклассу иметь свои свойства и методы.
  • Наследование и расширяемость: Sealed class — это базовый класс с ограниченным числом наследников, что удобно для выражения иерархий.
  • Использование в when: Компилятор проверяет полноту when по sealed class, что повышает безопасность.

Пример sealed class:

sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
    object Loading : Result()
}

fun handleResult(result: Result) {
    when(result) {
        is Result.Success -> println("Данные: ${result.data}")
        is Result.Error -> println("Ошибка: ${result.error.message}")
        Result.Loading -> println("Загрузка...")
    }
}

Если нужно просто перечисление фиксированных констант без данных — enum будет проще и эффективнее.