Care este diferența dintre utilizarea sealed class și enum în ceea ce privește constructorii lor și posibilitatea de a le crea?
sobes.tech AI
Răspuns de la AI
Enum în Kotlin (și Java) reprezintă un set de constante fixe. Fiecare enum are un set limitat de instanțe, definite în declarație. Constructorii enum sunt întotdeauna privați, și nu se pot crea noi instanțe — doar cele declarate.
Clasa sealed (sigilată) este o clasă abstractă cu un set limitat de subclase, declarate în același fișier. Spre deosebire de enum, clasa sealed permite crearea de tipuri diferite cu structuri și stări diferite. Constructorii clasei sealed pot fi deschiși sau închiși, și se pot crea noi instanțe ale subclasei, nu doar constante fixe.
Exemplu:
// Enum cu constructor privat și instanțe fixe
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Clasă sealed cu diferite subclase și constructori
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
Astfel, enum este limitat la un set fix de instanțe cu un constructor privat, în timp ce clasa sealed este mai flexibilă, permițând crearea de subclase diferite cu propriile constructori și stări.