Sobes.tech
Junior — Middle

Kāda ir atšķirība starp sealed class un enum izmantošanu attiecībā uz to konstruktoriem un to izveides iespējām?

sobes.tech AI

Atbilde no AI

Kotlin (un Java) enum pārstāv fiksētu konstanti kopumu. Katram enum ir ierobežots piemēru skaits, kas definēts pašā deklarācijā. Enum konstruktoru vienmēr ir privāti, un jaunu piemēru izveidot nav iespējams — tikai tos, kas ir deklarēti.

Sealed class (noslēgta klase) ir abstrakta klase ar ierobežotu mantojošo skaitu, kas deklarēti tajā pašā failā. Atšķirībā no enum, sealed class ļauj izveidot dažādu tipu ar dažādām struktūrām un stāvokļiem. Sealed class konstruktorus var būt atvērtus vai slēgtus, un ir iespējams izveidot jaunas mantojošo piemēru kopas, ne tikai fiksētas konstantes.

Piemērs:

// Privāts konstruktoru un fiksētu piemēru ar enum
enum class Direction(val degrees: Int) {
    NORTH(0), EAST(90), SOUTH(180), WEST(270)
}

// Sealed class ar dažādiem mantojošiem un konstruktoru
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val error: Throwable) : Result()
}

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

Tādējādi, enum ir ierobežots līdz fiksētam piemēru kopumam ar privātu konstruktoru, bet sealed class ir elastīgāka, ļaujot izveidot dažādas apakšklases ar saviem konstruktoriem un stāvokļiem.