Java में Generics
जब आप सूची बनाते हैं तो कोणीय ब्रैकेट के अंदर एलिमेंट का टाइप नाम दें। Bin.java में सार्वजनिक class Bin रखें, java.util.ArrayList इम्पोर्ट करें, ArrayList<String> names = new ArrayList<>(); बनाएँ, "oak" जोड़ें, और names.get(0) प्रिंट करें। javac Bin.java से कंपाइल करें और java Bin चलाएँ। स्क्रीन पर oak दिखना चाहिए। दूसरा डेमो उसी तरह Integer मान 3 रखता है। वैकल्पिक Lambda अगले पेज के लिए छोड़ दें। यह पाठ कमांड-लाइन args या Scanner मिनी प्रोजेक्ट नहीं — यह टाइप किए गए जनरिक सूचियों का पाठ है।
टाइप आर्ग्युमेंट वाली String सूची
Bin.java खोलें। सार्वजनिक class नाम Bin रखें। बची हुई Program Arguments Flag डेमो, Box Scanner प्रॉम्प्ट, Compiling Build प्रिंट, और Collection Shelf इतिहास हटाएँ अगर वे जनरिक कहानी दबा दें। प्रोग्राम टाइपिंग का इंतज़ार नहीं करना चाहिए और args नहीं पढ़ना चाहिए।
ऊपर इम्पोर्ट जोड़ें:
import java.util.ArrayList;
Bin.main के अंदर ऐसी सूची बनाएँ जिसके एलिमेंट String हों:
ArrayList<String> names = new ArrayList<>();
ArrayList के बाद कोणीय ब्रैकेट में टाइप आर्ग्युमेंट String है। new वाली तरफ खाली <> डायमंड है — Java बाएँ से वही टाइप भर देता है। फिर एक शब्द रखें और इंडेक्स से प्रिंट करें:
names.add("oak");
System.out.println(names.get(0));
get(0) String लौटाता है क्योंकि सूची String से घोषित थी। स्क्रीन oak दिखाती है।
import java.util.ArrayList;
public class Bin {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("oak");
System.out.println(names.get(0));
}
}
जिस फ़ोल्डर में Bin.java है, वहाँ javac Bin.java चलाएँ। ब्रेस, ब्रैकेट और सेमिकोलन मेल खाने पर javac अपनी कोई लाइन नहीं लिखता। फिर java Bin चलाएँ — java Bin.java नहीं। एक सार्वजनिक class रखें ताकि नाम Bin से मेल खाए।
एक बार रन पर चलें। Java Bin.main से शुरू होता है। सूची String के लिए टाइप है। add "oak" रखता है। get(0) वह शब्द लौटाता है। println oak लिखता है। Flag से args[0] कुछ नहीं प्रिंट होता। item: पर कुछ नहीं रुकता। पुराना Shelf फ़ाइल न चलाएँ तो [oak, pine] नहीं दिखता।
स्क्रीन देखते हुए शुरुआती नियम कहें: कोणीय ब्रैकेट एलिमेंट टाइप बताते हैं; डायमंड new पर दोहराता है; get वही टाइप लौटाता है। इस पेज पर Lambda डेमो न बनाएँ। Lambda अगले वैकल्पिक पाठ का इंतज़ार करता है। इस शिक्षण फ़ाइल में सूची को ArrayList names जैसी raw बिना टाइप आर्ग्युमेंट न छोड़ें।
अगर java Flag oak से अभी भी oak दिखे तो वे प्रोग्राम आर्ग्युमेंट थे। यहाँ oak सूची का एलिमेंट है, और रन कमांड सिर्फ java Bin है। अगर javac को ArrayList न मिले तो इम्पोर्ट लाइन जाँचें।
उसी आदत से Integer सूची
जनरिक सिर्फ शब्दों के लिए नहीं हैं। वही सार्वजनिक class Bin रखें। Integer मानों की सूची बनाएँ:
ArrayList<Integer> nums = new ArrayList<>();
nums.add(3);
System.out.println(nums.get(0));
फिर से javac Bin.java कंपाइल करें और java Bin चलाएँ। स्क्रीन 3 दिखाती है। टाइप आर्ग्युमेंट Integer है क्योंकि ArrayList ऑब्जेक्ट रखती है, और इस शुरुआती आकार में पूर्ण संख्याओं के लिए Integer ऑब्जेक्ट रूप है। डायमंड अभी भी बाएँ से टाइप कॉपी करता है।
import java.util.ArrayList;
public class Bin {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(3);
System.out.println(nums.get(0));
}
}
एक बार रन पर चलें। सूची Integer के लिए टाइप है। add(3) मान रखता है। get(0) उसे लौटाता है। println 3 लिखता है। दोनों डेमो दो शिक्षण आकार के रूप में रखें। पहले String सूची सिद्ध करें। फिर Integer सूची। दोनों में इम्पोर्ट, डायमंड, add, और get(0) समान हैं।
अगर आप ArrayList<String> लिखकर add(3) करें तो javac बेमेल अस्वीकार करता है। अगर ArrayList<Integer> लिखकर add("oak") करें तो भी javac अस्वीकार करता है। टाइप आर्ग्युमेंट इस बात का अनुबंध है कि सूची में क्या रहेगा।
टाइप की गई सूची की आदतें
अभ्यास के दौरान टाइप आर्ग्युमेंट और डायमंड साथ रखें।
📊 Generics habits for Bin
| आदत | टाइप किया आकार | शुरुआती जाँच |
|---|---|---|
| घोषणा | ArrayList<String> names |
कोणीय ब्रैकेट एलिमेंट टाइप बताते हैं |
| बनाना | new ArrayList<>() |
डायमंड बाएँ से टाइप कॉपी करता है |
| String रखना | names.add("oak") |
मान String से मेल खाता है |
| Integer रखना | nums.add(3) |
मान Integer से मेल खाता है |
| पढ़ना | get(0) |
घोषित एलिमेंट टाइप लौटाता है |
Generics न तो Flag है न Lambda
Program Arguments ने लॉन्च लाइन से String[] args भरा था। Generics उस collection के एलिमेंट टाइप का नाम बताते हैं जिसे आप कोड में बनाते हैं। Lambda बाद के वैकल्पिक पेज पर कुछ कॉल आकार छोटे करेगा। आज इन तीन कामों को एक शुरुआती फ़ाइल में मिलाएँ नहीं।
Bin में oak सूची में सहेजा मान है। java Flag के बाद oak आर्ग्युमेंट था। वही वर्तनी, अलग काम। अगर बची Flag फ़ाइल को अभी भी कमांड लाइन पर शब्द चाहिए तो उसे इतिहास मानें और बिना अतिरिक्त शब्द java Bin चलाएँ।
टाइप आर्ग्युमेंट के बिना raw सूची इस पेज के स्पष्ट अनुबंध से चूक जाती है। जो डेमो रखें उनमें ArrayList<String> या ArrayList<Integer> रखें। Lambda सिंटैक्स इस पेज पर तब तक न लाएँ जब तक वह पाठ न आए।
Lambda से पहले फ़ोल्डर जाँच
सफल कंपाइल के बाद फ़ोल्डर सूचीबद्ध करें। Bin.java और Bin.class साथ दिखने चाहिए। स्रोत संपादित करें, सेव करें, javac Bin.java चलाएँ, फिर java Bin। संपादन के बाद कंपाइल छोड़ने पर पुराना .class पुराना प्रिंट दिखा सकता है।
अगर javac डुप्लिकेट सार्वजनिक class की शिकायत करे तो सिर्फ Bin सार्वजनिक रखें। अगर स्क्रीन oak की बजाय [oak] दिखाए तो आपने पूरी सूची प्रिंट की, get(0) नहीं — शिक्षण प्रिंट get(0) पर रखें। अगर कुछ न प्रिंट हो तो पुष्टि करें कि main अभी भी println बुला रहा है।
Flag आर्ग्युमेंट लूप Bin में पेस्ट न करें। Box Scanner प्रॉम्प्ट Bin में पेस्ट न करें। वैकल्पिक जनरिक काम स्पष्ट एलिमेंट टाइप वाली टाइप सूचियाँ हैं।
वैकल्पिक Lambda से पहले
आप सार्वजनिक class Bin, ArrayList इम्पोर्ट, डायमंड वाली ArrayList<String>, "oak" जोड़ना, get(0) से oak प्रिंट, फिर ArrayList<Integer>, 3 जोड़ना, और 3 प्रिंट रख सकते हैं। javac Bin.java से कंपाइल करें और java Bin चलाएँ। तालिका घोषणा, बनाना, रखना और पढ़ना अलग करती है। अगला वैकल्पिक पेज Lambda है।
स्पष्ट जनरिक जोड़े के लिए Bin डेमो रखें। टाइप सूची अभ्यास करते समय Flag आर्ग्युमेंट फ़ाइलें इस पेज से दूर रखें। टाइप सूची अभ्यास करते समय Box मिनी प्रोजेक्ट फ़ाइलें दूर रखें। Lambda काम इस पेज पर तब तक न लाएँ जब तक वह पाठ न आए। ये आदतें आगे बढ़ने से पहले चेकपॉइंट हैं। जब String डेमो oak या Integer डेमो 3 दिखाए, इस पाठ के लिए Generics का काम हो गया और वैकल्पिक रास्ते पर Lambda के लिए तैयार हैं।
अंतिम बार फ़ोल्डर से गुज़रें: एक सार्वजनिक Bin, इम्पोर्ट मौजूद, कोणीय ब्रैकेट में टाइप आर्ग्युमेंट, new पर डायमंड, मेल खाते add मान, get(0) प्रिंट, Scanner प्रतीक्षा नहीं, लॉन्च शब्द ज़रूरी नहीं। जो डेमो खुला है उस पर एक बार फिर javac Bin.java और java Bin चलाएँ। अगर स्क्रीन अभी भी oak या 3 दिखाए तो Generics आकार मज़बूत है और कोर्स अगले पेज पर वैकल्पिक Lambda की ओर बढ़ सकता है। हर पढ़ाई में एक स्पष्ट टाइप-सूची आदत रखें ताकि हर बार वही नक्शा सिखे।
🧠 अपने ज्ञान की परीक्षा करें
अपने ज्ञान की परीक्षा करें
इस इंटरैक्टिव क्विज़ के साथ अपनी चुनौती लें और देखें कि आप विषय को कितनी अच्छी तरह समझते हैं
📝 निर्देश
- हर प्रश्न को ध्यान से पढ़ें
- हर प्रश्न के लिए सबसे अच्छा उत्तर चुनें
- आप जितनी बार चाहें क्विज़ दोबारा दे सकते हैं
- आपकी प्रगति शीर्ष पर दिखाई जाएगी