Middle
Kotlinдеги 'sealed' класстары эмне жана кайсы учурларда колдонуш керек?
sobes.tech AI
AIден жооп
sealed класс колдонулат чектелген класс хиерархиясын көрсөтүү үчүн. Бардык түз мураскорлор sealed класс ошол эле файлда аныкталышы керек, же ошол эле модулдарда (Kotlin 1.5+ үчүн). Бул компиляторго when билдирүүсүндө бардык мүмкүн болгон подтиптер иштетилгенин текшерүүгө мүмкүндүк берет, аны толук кылып, else бөлүмүнөн муктажсыз кылат.
Негизги өзгөчөлүктөр:
- Бардык түз мураскорлор жергиликтүү болушу керек.
sealedкласс конструктору алдын алаprivateболот.sealedкласс абстракттуу боло албайт.- Мисалдар түзүүгө уруксат берилбейт.
Колдонуу учурлары:
- чектелген абалдар же натыйжалардын көрсөтүлүшү. Мисалы,
Loading,Success(data),Error(message):sealed class Result<out T> { data class Success<T>(val data: T) : Result<T>() data class Error(val message: String) : Result<Nothing>() object Loading : Result<Nothing>() } whenбилдирүүсүндө натыйжалардын варианттарын иштетүү, толуктуулукту камсыз кылуу:fun processResult(result: Result<String>) { when (result) { is Result.Success -> println("Деректер алынды: ${result.data}") is Result.Error -> println("Ката: ${result.message}") Result.Loading -> println("Жүктөө...") } // `else` бөлүмү керек эмес, анткени компилятор бардык подтиптерди билет. }- Ар бир вариантта маалыматтарды инкапсуляциялоо мүмкүнчүлүгү менен enum-дарга окшош колдонуу:
Enum класстары менен салыштыруу:
| Өзгөчөлүк | enum class |
sealed class |
|---|---|---|
| Иш жүзүндө | Атау менен белгиленген константтардын чектелген тизмеси | Чектелген типтердин тизмеси |
| Варианттарда маалымат | Жок (тек касиеттер) | Ооба (подкласстар аркылуу) |
| Абаастракт мүчөлөр | Жок | Ооба |
| Мураскорлук | Жок | Ооба, бирок ошол эле файлда/модулда |