Kotlin-də sealed class və interface — bu nədir, sintaksis və tətbiqi

Müəllif: IT Sectr Dərc olunub: 2026-06-20 Oxuma vaxtı: 11 dəq

sealed class və sealed interface Kotlin-də məhdud tip iyerarxiyası mexanizmləridir, burada bütün mümkün alt siniflər kompilyasiya mərhələsində məlumdur. Adi abstrakt siniflərdən fərqli olaraq, sealed class when ifadəsində bütün variantların tam emalını təmin edir. JetBrains Kotlin Language Guide (2026) sənədləşməsinə görə, sealed tiplər Kotlin layihələrində vəziyyətlərin, UI ekranlarının və nəticə tiplərinin modelləşdirilməsi üçün əsas təşkil edir.

Əsas məqamlar

  • sealed — bütün alt siniflərin kompilyasiya mərhələsində məlum olduğu məhdud iyerarxiya
  • when — məcburi else bloku olmadan bütün alt siniflərin tam emalı
  • sealed interface — miras məhdudiyyətləri olmayan çevik iyerarxiyalar üçün Kotlin 1.5-də əlavə edilib
  • Kompilyasiya — sealed tipləri üçün natamam when zamanı kompilyasiya xətası
  • İyerarxiya — bütün alt siniflər eyni faylda və ya sealed sinifin daxilində olmalıdır

Sealed class və sealed interface nədir?

sealed class məhdudiyyətli abstrakt sinifdir: onun bütün birbaşa alt sinifləri sealed class ilə eyni faylda elan edilməlidir. Bu məhdudiyyət iyerarxiyanı qapalı (sealed) edir — fayldan kənar heç bir kod yeni alt sinif əlavə edə bilməz.

sealed interface, Kotlin 1.5-də əlavə edilmiş, eyni təminatı interfeys çevikliyi ilə təqdim edir: sealed interface bir çox sinif, obyekt və ya digər interfeyslər tərəfindən eyni faylda tətbiq edilə bilər. Sealed class-dan fərqli olaraq, sealed interface tək miras məhdudiyyətinə malik deyil — sinif eyni anda bir neçə sealed interfeysi tətbiq edə bilər.

Kotlin Evolution and Roadmap (2026) məlumatlarına görə, sealed interface daha çevik modelləşdirmə üçün icma tərəfindən tələb olunaraq əlavə edilmişdir. Əsas motivasiya siniflərin çoxlu mirası olmadan müstəqil tip iyerarxiyalarını birləşdirmək imkanı idi.

Sealed class sintaksisi

Sealed class-ın elanı class-dan əvvəl sealed açar sözü ilə başlayır. Alt siniflər eyni faylda elan edilir.

kotlin
sealed class NetworkResult {
    data class Success(val data: String) : NetworkResult()
    data class Error(val message: String) : NetworkResult()
    object Loading : NetworkResult()
}

Hər sealed class alt sinifi öz xassə və metodlarına malik ola bilər. Loading singleton (object), Success və Error isə parametrli data class-dır. Kompilyator hər üç variantı bilir və when istifadəsi zamanı onların tamlığını yoxlayır.

İç-içə sealed class

sealed siniflər tip təhlükəsizliyini itirmədən mürəkkəb məlumat modelləri üçün çoxsəviyyəli iyerarxiyalar yaradaraq iç-içə yerləşə bilər.

kotlin
sealed class UiState {
    object Idle : UiState()
    object Loading : UiState()
    data class Content(val items: List<Item>) : UiState()
    data class Error(val exception: Throwable) : UiState()
}

Sealed interface sintaksisi (Kotlin 1.5+)

sealed interface sealed class kimi elan edilir, lakin bir sinifdə bir neçə sealed interfeysi tətbiq etməyə imkan verir.

kotlin
sealed interface Action
sealed interface Loggable

data class Navigate(val route: String) : Action, Loggable
data class ShowToast(val text: String) : Action
object GoBack : Action, Loggable

Navigate sinifi eyni anda iki sealed interfeysi — Action və Loggable tətbiq edir. Sealed class üçün bu tək miras məhdudiyyətinə görə mümkün deyil. sealed interface müstəqil iyerarxiyaların birləşdirilməsi çevikliyini təmin edir.

Nə zaman sealed interface-i sealed class-a üstün tutmalı

sealed interface iyerarxiya ümumi vəziyyət və ya konstruktor tələb etmədikdə daha üstündür. JetBrains Kotlin Guidelines (2026) görə, ümumi konstruktor tələb olunmayan bütün yeni iyerarxiyalar üçün defolt olaraq sealed interface istifadə edilməlidir, bu da kodu gələcək genişlənmələr üçün daha çevik edir.

When-də tam emal

Sealed tiplərinin əsas üstünlüyü when ifadəsində tam (exhaustive) emaldır. Kompilyator bütün mümkün alt siniflərin nəzərə alındığını yoxlayır.

kotlin
fun handleResult(result: NetworkResult): String = when (result) {
    is NetworkResult.Success -> "Data: ${result.data}"
    is NetworkResult.Error -> "Error: ${result.message}"
    is NetworkResult.Loading -> "Loading..."
    // else tələb olunmur — kompilyator bütün variantların əhatə olunduğunu bilir
}

Əgər tərtibatçı sealed iyerarxiyasına yeni alt sinif əlavə edərsə, lakin onu when-də emal etməyi unudarsa — kompilyator xəta verəcək. Bu, else qolu olan açıq iyerarxiyalarda mümkün olmayan tip səviyyəsində təhlükəsizlikdir.

Google Android Developers (2026) məlumatlarına görə, sealed siniflər Jetpack Compose-da UI vəziyyətinin modelləşdirilməsi üçün tövsiyə olunan üsuldur. When-in tam yoxlanması tərtibatçının ekranın göstərilməsinin bütün mümkün variantlarını emal etmədiyi halların qarşısını alır.

Sealed class ilə enum class müqayisəsi

enum class və sealed class tez-tez qarışdırılır, lakin onların fərqli təyinat və imkanları var.

Xüsusiyyətsealed classenum class
NümunələrÇoxlu (data class), bir (object)Sabit başına tam bir
XassələrHər alt sinif üçün fərqliBütün sabitlər üçün eyni
MirasBəli (sealed class-dan)Xeyr (implicit final)
KonstruktorParametrlərə malik ola bilərYalnız bütün sabitlər üçün ümumi
İyerarxiyaMəhdud, sealedSabit sabitlər dəsti

Seçim sealed class və enum class arasında tapşırıqdan asılıdır. Variantlar əlavə məlumat daşımırsa — enum istifadə edin. Hər variant unikal sahələr ehtiva edirsə — sealed class və ya sealed interface istifadə edin.

Praktik tətbiq ssenariləri

sealed tiplər Kotlin layihələrində tip təhlükəsiz modelləşdirmə tələb edən bir sıra standart ssenarilər üçün istifadə olunur.

Jetpack Compose-da UI vəziyyəti

Hər Compose ekranı bütün mümkün vəziyyətləri təsvir edən sealed class UiState-ə malik ola bilər: Idle, Loading, Content(data), Error(exception). when ifadəsi bütün vəziyyətlərin emal edildiyini təmin edir.

Şəbəkə sorğularının nəticəsi

NetworkResult Success, Error, Loading variantları ilə Retrofit və Ktor ilə Kotlin layihələrində standart nümunədir. sealed class sorğunun hər bir nəticəsinin təhlükəsiz emalını təmin edir.

Multi-modul layihələrində naviqasiya

sealed interface naviqasiya marşrutları üçün modullara vahid iyerarxiya çərçivəsində öz marşrutlarını elan etməyə imkan verir. Bu, kompilyasiya mərhələsində naməlum marşrutlarla bağlı səhvləri aradan qaldırır.

KotlinConf (2025) məlumatlarına görə, sealed class və sealed interface müasir Kotlin tətbiqlərində type-safe dizaynın əsasını təşkil edir. Onlar kompilyasiya mərhələsində təhlükəsizliyi itirmədən mürəkkəb domen strukturlarının modelləşdirilməsi üçün data class ilə birləşdirilir.

Tez-tez verilən suallar

Sealed class alt sinifləri harada elan edilməlidir?

Bütün birbaşa sealed class alt sinifləri eyni faylda elan edilməlidir. Sealed interface üçün də eyni qayda — tətbiqlər bir faylda olmalıdır.

Sealed interface başqa faylda tətbiq edilə bilərmi?

Xeyr, bir fayl qaydası sealed interface üçün də keçərlidir. Bütün tətbiqlər sealed interface-in elan edildiyi faylda olmalıdır.

Sealed class ilə sealed interface arasında nə fərq var?

sealed interface vəziyyət və konstruktora malik deyil, çoxsaylı tətbiqə imkan verir. sealed class konstruktor və ümumi vəziyyətə malik ola bilər, lakin sinif yalnız bir sealed class-dan miras ala bilər.

Sealed siniflər when ifadələrində necə kömək edir?

Kompilyator when-in tamlığını yoxlayır: bütün alt siniflər emal edilməyibsə, kod kompilyasiya olunmur. Bu, runtime səhvlərini aradan qaldırır və kodu təhlükəsiz edir.

Konstruktor ilə sealed class yaratmaq mümkündürmü?

Bəli, sealed class konstruktora malik ola bilər (defolt olaraq private). Bütün alt siniflər super() vasitəsilə bu konstruktora parametrlər ötürə bilər.

Nəticə

  • sealed class — alt sinifləri kompilyasiya mərhələsində məlum olan məhdud iyerarxiya
  • sealed interface — çoxsaylı tətbiq dəstəyi ilə çevik alternativ (Kotlin 1.5+)
  • when — kompilyator yoxlaması ilə tam emal, else tələb olunmur
  • Bir fayl — bütün alt siniflər və tətbiqlər sealed tip ilə eyni faylda olmalıdır
  • Modelləşdirmə — UI vəziyyətləri, şəbəkə nəticələri, naviqasiya, hadisə sistemləri
  • Təhlükəsizlik — when-də emal edilmədən yeni alt sinif əlavə etmək kompilyasiya xətasına səbəb olur
  • Seçim — defolt olaraq sealed interface üstünlük təşkil edir, sealed class ümumi vəziyyət lazım olduqda

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun