Sobes.tech
Junior — Middle

Каква е разликата между използването на 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 — по-гъвкав, позволява създаването на различни подкласове с техните собствени конструктори и състояния.