Sealed प्रकारों पर संपूर्ण switch
कम्पाइल के समय पूर्णता की जाँच
Sealed प्रकारों पर संपूर्ण switch, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
सर्वसमावेशी switch
जब आप किसी सीलबंद प्रकार पर switch करते हैं, तो कंपाइलर को प्रत्येक अनुमत उपप्रकार का पता होता है। यदि आपका स्विच उन सभी को सँभालता है, तो वह सर्वसमावेशी होता है और आपको डिफ़ॉल्ट शाखा की आवश्यकता नहीं होती।
प्रकार-प्रतिरूप वाला switch
स्विच अभिव्यक्तियाँ प्रकार प्रतिरूपों का उपयोग करके सीलबंद मान के रनटाइम प्रकार से मिलान कर सकती हैं।
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
static String describe(Shape s) {
return switch (s) {
case Circle c -> "circle r=" + c.radius();
case Square sq -> "square s=" + sq.side();
};
}
public static void main(String[] args) {
System.out.println(describe(new Circle(2)));
System.out.println(describe(new Square(3)));
}
}डिफ़ॉल्ट की आवश्यकता नहीं
क्योंकि Circle और Square ही एकमात्र अनुमत उपप्रकार हैं, कंपाइलर स्विच को पूर्ण मान लेता है। default जोड़ना अनावश्यक होगा।
संकलन-समय पूर्णता
यदि आप बाद में कोई नया अनुमत उपप्रकार जोड़ते हैं और उसे सँभालना भूल जाते हैं, तो प्रत्येक सर्वसमावेशी स्विच संकलित होने में विफल हो जाता है। इससे रनटाइम त्रुटियों की पूरी श्रेणी संकलन त्रुटियों में बदल जाती है।
Result की गणना
सर्वसमावेशी स्विच अभिव्यक्तियाँ किसी मान को area जैसे परिणाम में बदलने के लिए बहुत उपयोगी होती हैं।
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
static double area(Shape s) {
return switch (s) {
case Circle c -> Math.PI * c.radius() * c.radius();
case Square sq -> sq.side() * sq.side();
};
}
public static void main(String[] args) {
System.out.printf("%.2f%n", area(new Circle(1)));
System.out.printf("%.2f%n", area(new Square(2)));
}
}स्विच कथन बनाम अभिव्यक्तियाँ
सर्वसमावेशिता स्विच अभिव्यक्तियों पर लागू होती है, यानी उन पर जो कोई मान देती हैं, और उन स्विच कथनों पर भी जो सीलबंद प्रकार के साथ तीर वाले रूप का उपयोग करते हैं। कंपाइलर सभी मामलों को शामिल करना अनिवार्य करता है।
रिक्त मान सँभालना
डिफ़ॉल्ट रूप से, किसी संदर्भ पर किया गया स्विच तब NullPointerException उत्पन्न करता है जब मान रिक्त हो। इसे स्पष्ट रूप से सँभालने के लिए आप case null लेबल जोड़ सकते हैं।
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
static String describe(Shape s) {
return switch (s) {
case null -> "no shape";
case Circle c -> "circle";
case Square sq -> "square";
};
}
public static void main(String[] args) {
System.out.println(describe(null));
System.out.println(describe(new Circle(1)));
}
}शर्तें सर्वसमावेशिता को नहीं तोड़तीं
मामलों को और सटीक बनाने के लिए आप when शर्तें जोड़ सकते हैं, लेकिन केवल शर्त वाला मामला किसी प्रकार को पूर्ण रूप से शामिल नहीं करता। सर्वसमावेशिता बनाए रखने के लिए आपको प्रत्येक उपप्रकार के लिए बिना शर्त वाला मामला भी चाहिए।
public class Main {
sealed interface Shape permits Circle, Square {}
record Circle(double radius) implements Shape {}
record Square(double side) implements Shape {}
static String size(Shape s) {
return switch (s) {
case Circle c when c.radius() > 10 -> "big circle";
case Circle c -> "small circle";
case Square sq -> "square";
};
}
public static void main(String[] args) {
System.out.println(size(new Circle(20)));
System.out.println(size(new Circle(2)));
}
}सीलबंद क्लास पर स्विच करना
यही सर्वसमावेशिता केवल इंटरफ़ेस ही नहीं, बल्कि सीलबंद क्लास पर भी काम करती है।
public class Main {
sealed static abstract class Token permits Word, Number {}
static final class Word extends Token { final String text; Word(String t){text=t;} }
static final class Number extends Token { final int value; Number(int v){value=v;} }
static String show(Token t) {
return switch (t) {
case Word w -> "word:" + w.text;
case Number n -> "num:" + n.value;
};
}
public static void main(String[] args) {
System.out.println(show(new Word("hi")));
System.out.println(show(new Number(7)));
}
}यह इतना शक्तिशाली क्यों है
सर्वसमावेशी स्विच और सीलबंद प्रकार मिलकर सुरक्षित तथा आसानी से विकसित किया जा सकने वाला कोड देते हैं। मामलों का समूह एक ही स्थान पर दर्ज होता है और मॉडल बढ़ने पर कंपाइलर यह सुनिश्चित करता है कि आप कोई मामला न छोड़ें।
एक पूर्ण उदाहरण
यहाँ एक सीलबंद Result प्रकार को सभी मामलों को सँभालते हुए संदेश में बदला गया है।
public class Main {
sealed interface Result permits Ok, Err {}
record Ok(int value) implements Result {}
record Err(String message) implements Result {}
static String render(Result r) {
return switch (r) {
case Ok ok -> "value = " + ok.value();
case Err err -> "error: " + err.message();
};
}
public static void main(String[] args) {
System.out.println(render(new Ok(10)));
System.out.println(render(new Err("bad input")));
}
}त्वरित जाँच
सर्वसमावेशी switch की अपनी समझ जाँचिए।
पुनरावलोकन
आपने सीलबंद प्रकारों पर सर्वसमावेशी switch सीखा।
- सभी अनुमत उपप्रकारों को शामिल करने से स्विच सर्वसमावेशी हो जाता है, इसलिए
defaultकी आवश्यकता नहीं होती। - नए उपप्रकार को छोड़ देने पर संकलन त्रुटि उत्पन्न होती है।
case nullरिक्त मानों को स्पष्ट रूप से सँभालता है।- शर्तें मामले को अधिक सटीक बनाती हैं, लेकिन बिना शर्त वाले मामले का स्थान नहीं लेतीं।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Sealed प्रकारों पर संपूर्ण switch” पाठ निःशुल्क है?
हाँ—“Sealed प्रकारों पर संपूर्ण switch” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Sealed प्रकारों पर संपूर्ण switch” में मैं क्या सीखूँगा?
कम्पाइल के समय पूर्णता की जाँच आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Sealed प्रकारों पर संपूर्ण switch” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Sealed प्रकार घोषित करना
- permits क्लॉज़
- Records के साथ Sealed प्रकार
- Sealed प्रकारों पर संपूर्ण switch