Middle
Kotlin-də 'sealed' siniflər nədir və hansı hallarda istifadə edilməlidir?
sobes.tech Süni İntellekt
AI-dan cavab
sealed sinfi sinfi məhdud bir irs hierarxiyasını nümayiş etdirmək üçün istifadə olunur. sealed sinfinin bütün birbaşa alt tipləri eyni faylda və ya (Kotlin 1.5+ üçün) eyni modullarda müəyyən edilməlidir. Bu, tərtibçi üçün when ifadəsində bütün mümkün alt tiplərin işlənməsini yoxlamağa imkan verir və onu else bloku olmadan tam edir.
Əsas xüsusiyyətlər:
- Bütün birbaşa alt siniflər yerli olmalıdır.
sealedsinfinin konstruktoru standart olaraqprivate-dir.sealedsinfi abstrakt ola bilməz.- Nümunələrin yaradılmasına icazə vermir.
İstifadə halları:
- Məhdud bir vəziyyət və ya nəticələr toplusunu təmsil etmək. Məsələn,
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>() } whenifadəsində bütünlüklü yoxlama ilə variantların işlənməsi.fun processResult(result: Result<String>) { when (result) { is Result.Success -> println("Alınan məlumatlar: ${result.data}") is Result.Error -> println("Xəta: ${result.message}") Result.Loading -> println("Yüklənir...") } // `else` bloku lazım deyil, çünki tərtibçi bütün alt tipləri bilir. }- Hər bir variantda məlumatların inkapsulyasiyası üçün ekvivalent kimi istifadə olunur.
Enum sinifləri ilə müqayisə:
| Xüsusiyyətlər | enum class |
sealed class |
|---|---|---|
| Nümunələr | Məhdud sayda adlandırılmış sabitlər | Məhdud sayda tiplər |
| Variantlarda məlumatlar | Yox (yalnız xüsusiyyətlər) | Bəli (alt siniflər vasitəsilə) |
| Abstrakt üzvlər | Yox | Bəli |
| İrsiyyət | Yox | Bəli, lakin eyni fayl/modul ilə məhdudlaşdırılıb |