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 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-ın elanı class-dan əvvəl sealed açar sözü ilə başlayır. Alt siniflər eyni faylda elan edilir.
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.
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.
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 sealed class kimi elan edilir, lakin bir sinifdə bir neçə sealed interfeysi tətbiq etməyə imkan verir.
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.
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.
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.
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.
enum class və sealed class tez-tez qarışdırılır, lakin onların fərqli təyinat və imkanları var.
| Xüsusiyyət | sealed class | enum class |
|---|---|---|
| Nümunələr | Çoxlu (data class), bir (object) | Sabit başına tam bir |
| Xassələr | Hər alt sinif üçün fərqli | Bütün sabitlər üçün eyni |
| Miras | Bəli (sealed class-dan) | Xeyr (implicit final) |
| Konstruktor | Parametrlərə malik ola bilər | Yalnız bütün sabitlər üçün ümumi |
| İyerarxiya | Məhdud, sealed | Sabit 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.
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.
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.
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.
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
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.
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 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.
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.
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ə
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.
Həm də oxuyun