Ի՞նչ տարբերություն կա sealed class-ի և enum-ի օգտագործման միջև նրանց կոնստրուկցիաների և ստեղծման հնարավորությունների առումով։
sobes.tech AI
Պատասխան AI-ից
Kotlin (և Java) içində enum, sabit konstantların toplusunu təmsil edir. Hər bir enum, öz bəyanatında müəyyən edilmiş məhdud sayda nümunəyə malikdir. Enum konstruktorları həmişə özəldir və yeni nümunələr yaradıla bilməz — yalnız elan edilənlər.
Sealed class (mühürlənmiş sinif) isə, eyni faylda elan olunan məhdud sayda törəməklərə malik abstrakt sinifdir. Enum-dan fərqli olaraq, sealed class müxtəlif strukturlara və vəziyyətlərə malik müxtəlif növlər yaratmağa imkan verir. Sealed class konstruktorları açıq və ya bağlı ola bilər və yeni törəməklərin nümunələri yaradılır, yalnız sabitlər deyil.
Nümunə:
// Özəl konstruktor və sabit nümunələrlə enum
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Müxtəlif törəmələr və konstruktorlar ilə 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")
Beləliklə, enum, özəl konstruktor ilə məhdudlaşdırılmış sabit nümunələr toplusudur, sealed class isə daha çevikdir və müxtəlif törəmələr yaratmağa imkan verir, öz konstruktorları və vəziyyətləri ilə.