Kotlin میں sealed class اور interface — یہ کیا ہے، نحو اور استعمال

مصنف: IT Sectr اشاعت: 2026-06-20 مطالعے کا وقت: 11 منٹ

sealed class اور sealed interface Kotlin میں محدود قسم کے درجہ بندی کے میکانزم ہیں، جہاں تمام ممکنہ ذیلی طبقات تالیف کے وقت معلوم ہوتے ہیں۔ عام تجریدی طبقات کے برعکس، sealed class when-اظہار میں تمام متغیرات کی مکمل ہینڈلنگ کی ضمانت دیتا ہے۔ JetBrains Kotlin Language Guide (2026) دستاویزات کے مطابق، sealed اقسام Kotlin منصوبوں میں حالات، UI اسکرینوں اور نتیجہ کی اقسام کی ماڈلنگ کی بنیاد ہیں۔

اہم نکات

  • sealed — محدود درجہ بندی جہاں تمام ذیلی طبقات تالیف کے وقت معلوم ہوتے ہیں
  • when — لازمی else-بلاک کے بغیر تمام ذیلی طبقات کی مکمل ہینڈلنگ
  • sealed interface — Kotlin 1.5 میں وراثت کی پابندیوں کے بغیر لچکدار درجہ بندی کے لیے شامل کیا گیا
  • تالیف — sealed اقسام کے لیے نامکمل when پر تالیف کی خرابی
  • درجہ بندی — تمام ذیلی طبقات ایک ہی فائل میں یا sealed کلاس کے اندر ہونے چاہئیں

sealed class اور sealed interface کیا ہیں؟

sealed class ایک تجریدی کلاس ہے جس میں ایک پابندی ہے: اس کے تمام براہ راست ذیلی طبقات اسی فائل میں اعلان کیے جانے چاہئیں جہاں sealed class خود ہے۔ یہ پابندی درجہ بندی کو بند (sealed) بنا دیتی ہے — فائل کے باہر کا کوئی بھی کوڈ نیا ذیلی طبقہ شامل نہیں کر سکتا۔

sealed interface، جو Kotlin 1.5 میں شامل کیا گیا، وہی ضمانت فراہم کرتا ہے لیکن انٹرفیس کی لچک کے ساتھ: ایک sealed interface ایک فائل میں متعدد طبقات، اشیاء یا دیگر انٹرفیسز کے ذریعے نافذ کیا جا سکتا ہے۔ sealed class کے برعکس، sealed interface پر واحد وراثت کی کوئی پابندی نہیں ہے — ایک طبقہ ایک ساتھ متعدد sealed انٹرفیسز کو نافذ کر سکتا ہے۔

Kotlin Evolution and Roadmap (2026) کے مطابق، sealed interface کو زیادہ لچکدار ماڈلنگ کے لیے کمیونٹی کی درخواست پر شامل کیا گیا تھا۔ بنیادی محرک متعدد طبقہ وراثت کے بغیر آزاد قسم کے درجہ بندیوں کو یکجا کرنے کی صلاحیت ہے۔

sealed class کا نحو

sealed class کا اعلان class سے پہلے sealed modifier سے شروع ہوتا ہے۔ ذیلی طبقات اسی فائل میں اعلان کیے جاتے ہیں۔

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

sealed class کا ہر ذیلی طبقہ اپنی خصوصیات اور طریقے رکھ سکتا ہے۔ Loading ایک سنگلٹن (object) ہے، Success اور Error پیرامیٹرز کے ساتھ data class ہیں۔ مرتب کنندہ تینوں متغیرات کو جانتا ہے اور when میں استعمال ہونے پر ان کی مکملیت کی جانچ کرتا ہے۔

نیسٹڈ sealed طبقات

sealed طبقات نیسٹڈ ہو سکتے ہیں، قسم کی حفاظت کو کھوئے بغیر پیچیدہ ڈیٹا ماڈلز کے لیے کثیر سطحی درجہ بندی تشکیل دیتے ہیں۔

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 کا نحو (Kotlin 1.5+)

sealed interface کو sealed class کی طرح اعلان کیا جاتا ہے، لیکن ایک طبقہ میں متعدد sealed انٹرفیسز کو نافذ کرنے کی اجازت دیتا ہے۔

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 طبقہ ایک ساتھ دو sealed انٹرفیسز — Action اور Loggable — کو نافذ کرتا ہے۔ یہ واحد وراثت کی پابندی کی وجہ سے sealed class کے ساتھ ناممکن ہے۔ sealed interface آزاد درجہ بندیوں کو یکجا کرنے کی لچک فراہم کرتا ہے۔

sealed class کے بجائے sealed interface کب منتخب کریں

sealed interface اس وقت ترجیحی ہے جب درجہ بندی کو مشترکہ حالت یا تعمیر کنندہ کی ضرورت نہیں ہوتی۔ JetBrains Kotlin Guidelines (2026) کے مطابق، تمام نئی درجہ بندیوں کے لیے جہاں مشترکہ تعمیر کنندہ کی ضرورت نہیں، ڈیفالٹ طور پر sealed interface استعمال کیا جانا چاہیے، جو مستقبل میں توسیع کے لیے کوڈ کو زیادہ لچکدار بناتا ہے۔

when میں مکمل ہینڈلنگ

sealed اقسام کا بنیادی فائدہ when-اظہار میں مکمل (exhaustive) ہینڈلنگ ہے۔ مرتب کنندہ جانچ کرتا ہے کہ تمام ممکنہ ذیلی طبقات شامل ہیں۔

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 کی ضرورت نہیں — مرتب کنندہ جانتا ہے کہ تمام متغیرات کور ہیں
}

اگر کوئی ڈویلپر sealed درجہ بندی میں نیا ذیلی طبقہ شامل کرتا ہے لیکن اسے when میں ہینڈل کرنا بھول جاتا ہے — تو مرتب کنندہ خرابی دے گا۔ یہ قسم کی سطح پر حفاظت ہے، جو else-شاخ استعمال کرنے والی کھلی درجہ بندیوں میں دستیاب نہیں ہے۔

Google Android Developers (2026) کے مطابق، sealed طبقات Jetpack Compose میں UI حالت کو ماڈل کرنے کا تجویز کردہ طریقہ ہیں۔ when کی مکمل جانچ ان حالات کو روکتی ہے جہاں ڈویلپر نے اسکرین کے تمام ممکنہ ڈسپلے متغیرات کو ہینڈل نہیں کیا ہے۔

sealed class کا enum class سے موازنہ

enum class اور sealed class اکثر الجھائے جاتے ہیں، لیکن ان کے مختلف مقاصد اور صلاحیتیں ہیں۔

خصوصیتsealed classenum class
مثالیںمتعدد (data class)، ایک (object)فی مستقل بالکل ایک
خصوصیاتہر ذیلی طبقہ کے لیے مختلفتمام مستقلات کے لیے یکساں
وراثتہاں (sealed class سے)نہیں (ضمنی final)
تعمیر کنندہپیرامیٹرز رکھ سکتا ہےصرف تمام مستقلات کے لیے مشترکہ
درجہ بندیمحدود، sealedمستقلات کا مقررہ مجموعہ

sealed class اور enum class کے درمیان انتخاب کام پر منحصر ہے۔ اگر متغیرات اضافی ڈیٹا نہیں رکھتے — enum استعمال کریں۔ اگر ہر متغیر میں منفرد فیلڈز ہیں — sealed class یا sealed interface استعمال کریں۔

عملی استعمال کے منظرنامے

sealed اقسام Kotlin منصوبوں میں متعدد معیاری منظرناموں کے لیے استعمال ہوتی ہیں جہاں قسم کے لحاظ سے محفوظ ماڈلنگ کی ضرورت ہوتی ہے۔

Jetpack Compose میں UI حالت

ہر Compose اسکرین ایک sealed class UiState رکھ سکتی ہے جو تمام ممکنہ حالات بیان کرتی ہے: Idle، Loading، Content(data)، Error(exception)۔ when اظہار اس بات کی ضمانت دیتا ہے کہ تمام حالات ہینڈل کیے گئے ہیں۔

نیٹ ورک کی درخواستوں کے نتائج

NetworkResult Success، Error، Loading متغیرات کے ساتھ Retrofit اور Ktor استعمال کرنے والے Kotlin منصوبوں میں ایک معیاری نمونہ ہے۔ sealed class ہر درخواست کے نتیجے کی محفوظ ہینڈلنگ کو یقینی بناتا ہے۔

ملٹی ماڈیول منصوبوں میں نیویگیشن

sealed interface نیویگیشن راستوں کے لیے ماڈیولز کو ایک متحد درجہ بندی کے اندر رہتے ہوئے اپنے راستوں کا اعلان کرنے کی اجازت دیتا ہے۔ یہ تالیف کے وقت نامعلوم راستوں کی خرابیوں کو ختم کرتا ہے۔

KotlinConf (2025) کے مطابق، sealed class اور sealed interface جدید Kotlin ایپلیکیشنز میں قسم کے لحاظ سے محفوظ ڈیزائن کی بنیاد ہیں۔ یہ data class کے ساتھ مل کر تالیف کے وقت حفاظت کو کھوئے بغیر پیچیدہ ڈومین ڈھانچوں کی ماڈلنگ کرتے ہیں۔

اکثر پوچھے گئے سوالات

sealed class کے ذیلی طبقات کہاں اعلان کیے جانے چاہئیں؟

sealed class کے تمام براہ راست ذیلی طبقات اسی فائل میں اعلان کیے جانے چاہئیں۔ sealed interface کے لیے بھی یہی قاعدہ ہے — نفاذ ایک فائل میں۔

کیا sealed interface کے نفاذ مختلف فائل میں ہو سکتے ہیں؟

نہیں، ایک فائل کا قاعدہ sealed interface پر بھی لاگو ہوتا ہے۔ تمام نفاذ اس فائل میں ہونے چاہئیں جہاں sealed interface کا اعلان کیا گیا ہے۔

sealed class اور sealed interface میں کیا فرق ہے؟

sealed interface میں کوئی حالت یا تعمیر کنندہ نہیں ہوتا اور یہ متعدد نفاذ کی اجازت دیتا ہے۔ sealed class میں تعمیر کنندہ اور مشترکہ حالت ہو سکتی ہے، لیکن ایک طبقہ صرف ایک sealed class سے وراثت حاصل کر سکتا ہے۔

sealed طبقات when-اظہار میں کیسے مدد کرتے ہیں؟

مرتب کنندہ when کی مکملیت کی جانچ کرتا ہے: اگر تمام ذیلی طبقات ہینڈل نہیں کیے گئے، کوڈ مرتب نہیں ہوتا۔ یہ رن ٹائم خرابیوں کو ختم کرتا ہے اور کوڈ کو محفوظ بناتا ہے۔

کیا sealed class میں تعمیر کنندہ ہو سکتا ہے؟

ہاں، ایک sealed class میں تعمیر کنندہ ہو سکتا ہے (ڈیفالٹ طور پر private)۔ تمام ذیلی طبقات super() کے ذریعے اس تعمیر کنندہ میں پیرامیٹرز منتقل کر سکتے ہیں۔

خلاصہ

  • sealed class — تالیف کے وقت معلوم ذیلی طبقات کے ساتھ محدود درجہ بندی
  • sealed interface — متعدد نفاذ کی حمایت کے ساتھ لچکدار متبادل (Kotlin 1.5+)
  • when — مرتب کنندہ کی جانچ کے ساتھ مکمل ہینڈلنگ، else کی ضرورت نہیں
  • ایک فائل — تمام ذیلی طبقات اور نفاذ sealed قسم والی فائل میں ہونے چاہئیں
  • ماڈلنگ — UI حالات، نیٹ ورک نتائج، نیویگیشن، واقعاتی نظام
  • حفاظت — when ہینڈلنگ کے بغیر نیا ذیلی طبقہ شامل کرنا تالیف کی خرابی کا سبب بنتا ہے
  • انتخاب — ڈیفالٹ طور پر sealed interface ترجیحی، sealed class جب مشترکہ حالت درکار ہو

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں