मुख्य सामग्री पर जाएं
मॉड्यूल 6 · पाठ 2 का 2पाठ्यक्रम में 12/14~15 min
मॉड्यूल पाठ (2/2)

जावा में जेनेरिक

जेनेरिक (जेनेरिक प्रकार) को कक्षाओं, इंटरफेस और तरीकों को पैरामीटर के रूप में विभिन्न प्रकारों पर संचालित करने की अनुमति देने के लिए जावा में पेश किया गया था। यह संकलन-समय प्रकार की सुरक्षा सुनिश्चित करता है और रनटाइम पर महंगी स्पष्ट कास्ट से बचाता है।

सामान्य वर्ग

एक सामान्य वर्ग को कोण कोष्ठक <T> का उपयोग करके परिभाषित किया गया है, जहां T एक प्रकार के लिए प्लेसहोल्डर के रूप में कार्य करता है जिसे क्लास के इंस्टेंटिअट होने पर निर्दिष्ट किया जाएगा।

Java
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Box ऑब्जेक्ट बनाते समय, हम वास्तविक प्रकार निर्दिष्ट करते हैं:

Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!

सामान्य तरीके

आप एक एकल सामान्य विधि को परिभाषित कर सकते हैं जो विभिन्न प्रकार के मापदंडों को स्वीकार कर सकती है। प्रकार पैरामीटर को विधि के रिटर्न प्रकार से पहले रखा जाता है।

Java
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

वाइल्डकार्ड और बाउंडेड प्रकार

हम किसी विशिष्ट प्रकार या उसके उपवर्गों को स्वीकार करने के लिए extends कीवर्ड (ऊपरी सीमा) का उपयोग करके जेनेरिक द्वारा स्वीकृत प्रकारों को प्रतिबंधित कर सकते हैं।

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

खुद कोशिश करना

व्यायाम#java.m6.l2.e1
प्रयास: 0लोड हो रहा है...

गेटर getValue() जो T लौटाता है और सेटर setValue(T मान) जो प्राइवेट वेरिएबल मान सेट करता है, को परिभाषित करके जेनेरिक क्लास बॉक्स को पूरा करें।

संपादक लोड हो रहा है...
संकेत दिखाएँ

सामान्य प्रकार के पैरामीटर `T` का उपयोग करके सही हस्ताक्षर के साथ विधियाँ लिखें।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m6.l2.e2
प्रयास: 0लोड हो रहा है...

एक स्थिर सामान्य विधि printArray बनाएं जो T[] नामक प्रकार की एक सरणी लेती है और प्रत्येक तत्व को प्रत्येक लूप का उपयोग करके प्रिंट करती है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

टाइप पैरामीटर `<T>` को `static` के तुरंत बाद और रिटर्न टाइप `void` से पहले रखा जाना चाहिए।

3 प्रयासों के बाद समाधान उपलब्ध है

व्यायाम#java.m6.l2.e3
प्रयास: 0लोड हो रहा है...

एक स्थिर वर्ग स्ट्रिंगकंटेनर बनाएं जो स्ट्रिंग के साथ पैरामीटरयुक्त कंटेनर इंटरफ़ेस को कार्यान्वित करता है। एक कंस्ट्रक्टर को परिभाषित करें जो स्ट्रिंग पैरामीटर लेता है और getItem() विधि लागू करता है।

संपादक लोड हो रहा है...
संकेत दिखाएँ

वर्ग हस्ताक्षर में और `getItem()` के रिटर्न प्रकार में सामान्य प्रकार `T` को `String` के साथ प्रतिस्थापित करें।

3 प्रयासों के बाद समाधान उपलब्ध है