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

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

Компании, где спрашивали
ИннотехИннотех

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

sobes.tech AI

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

Sealed class — это абстрактный класс с ограниченным набором наследников, которые объявляются в том же файле. В отличие от enum, sealed class позволяет создавать разные типы с разной структурой и состоянием. Конструкторы sealed class могут быть открытыми или закрытыми, и можно создавать новые экземпляры наследников, а не только фиксированные константы.

Пример:

// Enum с приватным конструктором и фиксированными экземплярами
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Sealed class с разными наследниками и конструкторами
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

val res: Result = Result.Success("OK")

Таким образом, enum ограничен фиксированным набором экземпляров с приватным конструктором, sealed class — более гибкий, позволяет создавать разные подклассы с собственными конструкторами и состоянием.