Sobes.tech
Назад к вопросам
Junior — Middle
68

Какое различие существует между закрытым классом (sealed class) и перечислением (enum)?

Ответ от нейросети

sobes.tech AI

Закрытый класс (sealed class) и перечисление (enum) — это разные концепции, хотя обе ограничивают набор возможных вариантов.

  • Закрытый класс (sealed class) — это класс, который ограничивает наследование: все подклассы должны быть объявлены в том же файле. Это позволяет компилятору знать все возможные наследники и использовать это для безопасного паттерн-матчинга. Закрытые классы часто применяются для моделирования иерархий с ограниченным числом вариантов, где каждый вариант может иметь собственные свойства и поведение.

  • Перечисление (enum) — это набор именованных констант, обычно используемых для представления фиксированного набора значений. В Android (Kotlin/Java) enum — это тип, где каждый элемент — это объект, но обычно без сложной логики.

Ключевые отличия:

  • Enum — фиксированный набор значений без наследования.
  • Sealed class — ограниченная иерархия классов с возможностью добавлять сложное поведение и свойства.

Пример на Kotlin:

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

enum class Direction {
    NORTH, SOUTH, EAST, WEST
}