Каква е разликата между използването на sealed class и enum по отношение на техните конструктори и възможността за създаване?
sobes.tech AI
Отговор от 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 — по-гъвкав, позволява създаването на различни подкласове с техните собствени конструктори и състояния.