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 मॉडिफायर से शुरू होती है। उपवर्ग उसी फ़ाइल में घोषित किए जाते हैं।

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 वर्ग नेस्टेड हो सकते हैं, जटिल डेटा मॉडल के लिए type safety खोए बिना बहु-स्तरीय पदानुक्रम बनाते हैं।

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 प्रोजेक्ट्स में कई मानक परिदृश्यों के लिए उपयोग किए जाते हैं जहाँ type-safe मॉडलिंग आवश्यक है।

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 अनुप्रयोगों में type-safe डिज़ाइन का आधार हैं। ये 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें