Java Generics: ClassCastException से बचकर लचीला कोड लिखें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java Generics: कोणीय कोष्ठकों से डरना छोड़ें और मजबूत कोड लिखना शुरू करें

\n\n

Java की दुनिया में एक चीज़ है जो नए डेवलपर्स को मल्टीथ्रेडिंग से भी ज़्यादा डराती है - वो हैं कोणीय कोष्ठक <>। Generics (जिन्हें जेनेरिक्स या सामान्यीकरण भी कहा जाता है) देखने में रहस्यमय लगते हैं, लेकिन असल में ये साफ और सुरक्षित कोड लिखने में आपके सबसे अच्छे साथी हैं। आइए उदाहरणों के साथ समझते हैं कि Java में टाइपिंग कैसे काम करती है, जिसे आप आज ही अपने प्रोजेक्ट में लागू कर सकते हैं।

\n\n

सोचिए: आप एक ऐसा मेथड लिख रहे हैं जो numbers, strings और आपकी खुद की क्लासेज़ के साथ काम करे। Generics के बिना आपको दर्जनों ओवरलोडेड मेथड बनाने पड़ते या Object का उपयोग करके बार-बार टाइप चेक करना पड़ता। Java Generics इस समस्या को सुरक्षित और सुंदर तरीके से हल करते हैं।

\n\n

Generics के बिना कोड क्यों खतरनाक हो जाता है?

\n\n

चलिए याद करते हैं कि Java 5 से पहले प्रोग्रामर कैसे काम करते थे। अगर आपने कभी ArrayList बिना टाइप बताए लिखा है, तो आप जानते हैं यह कितना बुरा सपना है:

\n\n
List list = new ArrayList();\nlist.add("नमस्ते");\nlist.add(42);\nlist.add(new Object());\n\n// कोड की 100 लाइनों के बाद:\nString text = (String) list.get(1); // रनटाइम पर ClassCastException!
\n\n

यह क्लासिक समस्या है: ClassCastException - एक एरर जो सिर्फ रनटाइम पर दिखती है। आपने लिस्ट किसी और मेथड को दी, और वहाँ किसी को लगता है कि इसमें सिर्फ strings हैं। और धमाका! आपका एप्लिकेशन क्रैश। Java में Generics टाइप चेकिंग को कम्पाइल टाइम पर ले आते हैं - यह ऐसा है जैसे गाड़ी चलाने से पहले ही बीमा लगा लेना।

\n\n

Java Generics: बुनियादी सिंटैक्स जो आपको जानना चाहिए

\n\n

Generics की मूल बात सरल है: हम क्लास या मेथड को टाइप से पैरामीटराइज़ करते हैं। किसी खास टाइप की जगह हम टाइप पैरामीटर लिखते हैं (आमतौर पर एक बड़ा अक्षर: T, E, K, V)।

\n\n

सबसे लोकप्रिय उदाहरण - Java Collections:

\n\n
// Generics के बिना - खतरनाक\nList rawList = new ArrayList();\n\n// Generics के साथ - सुरक्षित\nList<String> safeList = new ArrayList<>();\nsafeList.add("Java");\nsafeList.add("Generics");\n// safeList.add(123); // कम्पाइल एरर!
\n\n

अब कम्पाइलर जानता है: safeList में सिर्फ strings ही आ सकते हैं। कोई नंबर डालने की कोशिश कम्पाइल टाइम पर ही एरर देगी, रनटाइम पर नहीं। यही है Java टाइप सेफ्टी असल में।

\n\n

अपनी पहली generic क्लास बनाएँ

\n\n

मान लीजिए हम एक सिंपल कंटेनर बना रहे हैं जो एक वैल्यू स्टोर करे। Generics के बिना हमें Object का उपयोग करना पड़ता:

\n\n
public class Box {\n    private Object value;\n\n    public void set(Object value) { this.value = value; }\n    public Object get() { return value; }\n}
\n\n

और अब - Generics के साथ:

\n\n
public class Box<T> {\n    private T value;\n\n    public void set(T value) { this.value = value; }\n    public T get() { return value; }\n}\n\n// उपयोग:\nBox<Integer> intBox = new Box<>();\nintBox.set(100);\nint value = intBox.get(); // बिना कास्ट के!
\n\n

ध्यान दें: अब हमें (Integer) intBox.get() लिखने की ज़रूरत नहीं। कम्पाइलर खुद जानता है कि get() Integer लौटाएगा। यही है Java Generics का जादू।

\n\n

Java में टाइपिंग: सीमाएँ और Wildcards

\n\n

Generics बहुत सरल होते अगर उनमें कुछ बारीकियाँ न होतीं। सबसे महत्वपूर्ण है - bounded type parameters (सीमित टाइप पैरामीटर)। कभी-कभी हमें कहना होता है: "टाइप T एक नंबर होना चाहिए" या "T को Comparable इंटरफ़ेस लागू करना चाहिए"।

\n\n
// T सिर्फ Number या उसका सबक्लास हो सकता है\npublic class Calculator<T extends Number> {\n    private T value;\n\n    public double square() {\n        return value.doub                

ब्लॉग

पुस्तक अनुशंसाएँ