Sobes.tech
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.
  • sealed sinfinin konstruktoru standart olaraq private-dir.
  • sealed sinfi 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>()
    }
    
  • when ifadə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