इस लेख में, आप सील किए गए वर्ग के बारे में जानेंगे कि वे कैसे बनाए जाते हैं, और उदाहरणों की मदद से उनका उपयोग कब करना है।
सील वर्गों का उपयोग तब किया जाता है जब एक मूल्य सीमित सेट (प्रतिबंधित पदानुक्रम) से केवल एक प्रकार का हो सकता है।
सीलबंद कक्षाओं के बारे में विवरण में जाने से पहले, आइए जानें कि वे किस समस्या का समाधान करते हैं। आइए एक उदाहरण लेते हैं (आधिकारिक कोटलिन वेबसाइट से लिया गया - सील कक्षाओं का लेख):
class Expr class Const(val value: Int) : Expr class Sum(val left: Expr, val right: Expr) : Expr fun eval(e: Expr): Int = when (e) ( is Const -> e.value is Sum -> eval(e.right) + eval(e.left) else -> throw IllegalArgumentException("Unknown expression") )
उपरोक्त कार्यक्रम में, बेस क्लास Expr में दो व्युत्पन्न वर्ग Const (एक संख्या का प्रतिनिधित्व करता है) और Sum (दो भावों के योग का प्रतिनिधित्व करता है) है। यहां, else
अभिव्यक्ति में डिफ़ॉल्ट स्थिति के लिए शाखा का उपयोग करना अनिवार्य है ।
अब, यदि आप Expr
कक्षा से एक नया उपवर्ग प्राप्त करते हैं , तो संकलक को कुछ भी पता नहीं चलेगा क्योंकि else
शाखा इसे संभालती है जो बग को जन्म दे सकती है। जब हम एक नया उपवर्ग जोड़ते हैं तो संकलक एक त्रुटि जारी करता है तो बेहतर होता।
इस समस्या को हल करने के लिए, आप सीलबंद वर्ग का उपयोग कर सकते हैं। जैसा कि उल्लेख किया गया है, सीलबंद वर्ग उपवर्ग बनाने की संभावना को प्रतिबंधित करता है। और, जब आप एक when
अभिव्यक्ति में एक मोहरबंद वर्ग के सभी उपवर्गों को संभालते हैं , तो else
शाखा का उपयोग करना आवश्यक नहीं है ।
एक सील वर्ग बनाने के लिए, मुहरबंद संशोधक का उपयोग किया जाता है। उदाहरण के लिए,
सील वर्ग Expr
उदाहरण: सील्ड क्लास
यहां बताया गया है कि आप सील किए गए वर्ग का उपयोग करके उपरोक्त समस्या को कैसे हल कर सकते हैं:
sealed class Expr class Const(val value: Int) : Expr() class Sum(val left: Expr, val right: Expr) : Expr() object NotANumber : Expr() fun eval(e: Expr): Int = when (e) ( is Const -> e.value is Sum -> eval(e.right) + eval(e.left) NotANumber -> java.lang.Double.NaN )
जैसा कि आप देख सकते हैं, कोई else
शाखा नहीं है । यदि आप Expr
कक्षा से एक नया उपवर्ग प्राप्त करते हैं , तो संकलक शिकायत करेगा जब तक कि उपवर्ग when
अभिव्यक्ति में संभाला नहीं जाता है ।
कुछ महत्वपूर्ण नोट्स
- एक सील किए गए वर्ग के सभी उपवर्गों को उसी फ़ाइल में घोषित किया जाना चाहिए जहां सील वर्ग घोषित किया गया है।
- एक मोहरबंद वर्ग अपने आप में अमूर्त होता है, और आप इससे वस्तुओं को रोक नहीं सकते।
- आप सील किए गए वर्ग के गैर-निजी निर्माणकर्ता नहीं बना सकते हैं; उनके निर्माता
private
डिफ़ॉल्ट रूप से हैं।
एनम और सील क्लास के बीच अंतर
Enum वर्ग और सील वर्ग बहुत समान हैं। एक सीमांकित वर्ग के लिए एक enum प्रकार के लिए मानों का सेट भी प्रतिबंधित है।
अंतर केवल इतना है कि, एनम का केवल एक उदाहरण हो सकता है, जबकि एक सील वर्ग के एक उपवर्ग में कई उदाहरण हो सकते हैं।