Чем отличается использование sealed class от enum в отношении их конструкторов и возможности их создания?
Answer from AI
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 — более гибкий, позволяет создавать разные подклассы с собственными конструкторами и состоянием.