Какое различие существует между закрытым классом (sealed class) и перечислением (enum)?
Answer from AI
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
}