Seal class va enumni ularning konstruktorlari va ularni yaratish imkoniyatlari bo'yicha qanday farq bor?
sobes.tech AI
AIdan javob
Kotlin (va Java) da enum doimiy konstantalar to‘plamini ifodalaydi. Har bir enumda e’lon qilinadigan cheklangan sonli nusxalar mavjud. Enum konstruktorlari har doim xususiy bo‘lib, yangi nusxalar yaratib bo‘lmaydi — faqat e’lon qilinganlar.
Sealed class (yopilgan sinf) — bu cheklangan merosxo‘rlar to‘plamiga ega bo‘lgan abstrakt sinf bo‘lib, ular bir xil faylda e’lon qilinadi. Enumdan farqli o‘laroq, yopilgan sinf turli tuzilma va holatga ega turli turlarni yaratishga imkon beradi. Yopilgan sinf konstruktorlari ochiq yoki yopiq bo‘lishi mumkin, va yangi merosxo‘r nusxalarini yaratish mumkin, faqat cheklangan konstantalar emas.
Misol:
// Xususiy konstruktor va cheklangan nusxalar bilan enum
enum class Direction(val degrees: Int) {
NORTH(0), EAST(90), SOUTH(180), WEST(270)
}
// Turli merosxo‘rlar va konstruktorlar bilan yopilgan sinf
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val error: Throwable) : Result()
}
val res: Result = Result.Success("OK")
Shu tarzda, enum xususiy konstruktor bilan cheklangan cheklangan nusxalar to‘plamiga ega, yopilgan sinf esa ko‘proq moslashuvchan bo‘lib, o‘z konstruktorlari va holatlari bilan turli xil merosxo‘rlarni yaratishga imkon beradi.