sealed class और sealed interface Kotlin में सीमित प्रकार पदानुक्रम के तंत्र हैं, जहाँ सभी संभावित उपवर्ग संकलन समय पर ज्ञात होते हैं। सामान्य अमूर्त कक्षाओं के विपरीत, sealed class when-अभिव्यक्ति में सभी प्रकारों की व्यापक हैंडलिंग सुनिश्चित करता है। JetBrains Kotlin Language Guide (2026) के अनुसार, sealed प्रकार Kotlin प्रोजेक्ट्स में स्थितियों, UI स्क्रीन और परिणाम प्रकारों के मॉडलिंग का आधार हैं।
मुख्य बिंदु
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 की घोषणा class से पहले sealed मॉडिफायर से शुरू होती है। उपवर्ग उसी फ़ाइल में घोषित किए जाते हैं।
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 वर्ग नेस्टेड हो सकते हैं, जटिल डेटा मॉडल के लिए type safety खोए बिना बहु-स्तरीय पदानुक्रम बनाते हैं।
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 के समान घोषित किया जाता है, लेकिन एक वर्ग में कई sealed इंटरफ़ेस को लागू करने की अनुमति देता है।
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 interface तब बेहतर होता है जब पदानुक्रम को साझा स्थिति या कंस्ट्रक्टर की आवश्यकता नहीं होती। JetBrains Kotlin Guidelines (2026) के अनुसार, सभी नए पदानुक्रमों के लिए डिफ़ॉल्ट रूप से sealed interface का उपयोग किया जाना चाहिए जहाँ सामान्य कंस्ट्रक्टर की आवश्यकता नहीं है, जिससे भविष्य के विस्तार के लिए कोड अधिक लचीला हो जाता है।
sealed प्रकारों का मुख्य लाभ when-अभिव्यक्ति में व्यापक (exhaustive) हैंडलिंग है। कंपाइलर जाँचता है कि सभी संभावित उपवर्ग शामिल हैं।
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 की व्यापक जाँच उन स्थितियों को रोकती है जहाँ डेवलपर ने स्क्रीन के सभी संभावित प्रदर्शन प्रकारों को हैंडल नहीं किया है।
enum class और sealed class को अक्सर भ्रमित किया जाता है, लेकिन उनके अलग-अलग उद्देश्य और क्षमताएँ हैं।
| विशेषता | sealed class | enum class |
|---|---|---|
| उदाहरण | एकाधिक (data class), एक (object) | प्रति स्थिरांक बिल्कुल एक |
| गुण | प्रत्येक उपवर्ग के लिए अलग | सभी स्थिरांकों के लिए समान |
| इनहेरिटेंस | हाँ (sealed class से) | नहीं (अंतर्निहित final) |
| कंस्ट्रक्टर | पैरामीटर हो सकते हैं | सभी स्थिरांकों के लिए केवल साझा |
| पदानुक्रम | सीमित, sealed | स्थिरांकों का निश्चित सेट |
sealed class और enum class के बीच चुनाव कार्य पर निर्भर करता है। यदि प्रकार अतिरिक्त डेटा नहीं रखते — enum का उपयोग करें। यदि प्रत्येक प्रकार में अद्वितीय फ़ील्ड हैं — sealed class या sealed interface का उपयोग करें।
sealed प्रकार Kotlin प्रोजेक्ट्स में कई मानक परिदृश्यों के लिए उपयोग किए जाते हैं जहाँ type-safe मॉडलिंग आवश्यक है।
प्रत्येक 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 interface के लिए भी यही नियम है — कार्यान्वयन एक फ़ाइल में।
नहीं, एक फ़ाइल का नियम sealed interface पर भी लागू होता है। सभी कार्यान्वयन उस फ़ाइल में होने चाहिए जहाँ sealed interface घोषित किया गया है।
sealed interface में कोई स्थिति या कंस्ट्रक्टर नहीं होता और यह एकाधिक कार्यान्वयन की अनुमति देता है। sealed class में कंस्ट्रक्टर और साझा स्थिति हो सकती है, लेकिन एक वर्ग केवल एक sealed class को इनहेरिट कर सकता है।
कंपाइलर when की पूर्णता की जाँच करता है: यदि सभी उपवर्ग हैंडल नहीं किए गए, तो कोड संकलित नहीं होता। यह रनटाइम त्रुटियों को समाप्त करता है और कोड को सुरक्षित बनाता है।
हाँ, sealed class में कंस्ट्रक्टर हो सकता है (डिफ़ॉल्ट रूप से private)। सभी उपवर्ग super() के माध्यम से इस कंस्ट्रक्टर में पैरामीटर पास कर सकते हैं।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें