Wildcards , extends, super Java In Hindi
जावा प्रोग्रामिंग लैंग्वेज में जेनेरिक्स क्लास मेथड में एक वाइल्डकार्ड (?) एक अनजान डाटा टाइप वैल्यू मेथड को रिप्रेजेंट करते है।

जावा जेनेरिक्स में वाइल्डकार्ड मुख्य यूज़ जेनेरिक कलेक्शन डाटा टाइप के साथ काम करते समय ये यूज़ किए जाते हैं, और ये जेनेरिक्स वाइल्डकार्ड (?) जावा में तब यूज़ किए जाते हैं, जब जावा डेवलपर चाहते हैं कि कोई जेनेरिक्स क्लास मेथड अलग-अलग क्लास डाटा टाइप वैल्यू पैरामीटर वाले डाटा टाइप एलिमेंट को एक्सेप्ट करे।
There are three main types of wildcards in Java generics.
- <?> — अनबाउंडेड जेनेरिक्स वाइल्डकार्ड।
- <? extends T> — अपर-बाउंडेड जेनेरिक्स वाइल्डकार्ड।
- <? super T> — लोअर-बाउंडेड जेनेरिक्स वाइल्डकार्ड।
Unbounded wildcard <?> concept in Java.
जावा प्रोग्राम में अनबाउंडेड जेनेरिक्स वाइल्डकार्ड <?> का अर्थ कोई भी क्लास डाटा टाइप एलिमेंट वैल्यू नेचर में डिफाइन हो सकता है।
Example of Unbounded wildcard <?>.
List<?> list
Here, this can mean the List collection data type.
- List<String> स्ट्रिंग डाटा टाइप के लिए
- List<Integer> इन्टिजर डाटा टाइप के लिए
- List<Double> डबल डाटा टाइप के लिए
- List<Employee> एक कस्टम लिस्ट डाटा टाइप के लिए
Example of an Unbounded wildcard.
import java.util.List;
import java.util.Arrays;
public class Main {
public static void preview(List<?> list) {
for (Object value : list) {
System.out.println(value);
}
}
public static void main(String[] args) {
List<String> comp_names =
Arrays.asList(“Vcanhelpsu”, “Vcandevelop”);
List<Integer> numerics =
Arrays.asList(98, 77, 11, 44, 88);
System.out.println(“*********The Company Names*********”);
preview(comp_names);
System.out.println(“\n*********The numerics*********”);
preview(numerics);
}
}
The key point of the unbounded wildcard.
यहाँ इस एक्साम्प्ल में List<?> अनबॉंडेड वाइल्डकार्ड डाटा टाइप के साथ, जावा यूजर सामान्य रूप से एक स्पेसिफिक वैल्यू को ऐड नहीं कर सकते है. क्योंकि इसमें रियल डाटा टाइप डिक्लेरेशन नेचर का पता नहीं होता है।
List<?> list = new ArrayList<String>();
list.add(“Vcanhelpsu”); //
लेकिन इसमें जावा यूजर क्लास वैल्यू को ऑब्जेक्ट के रूप में रीड कर सकते हैं.
Object value = list.get(0);
Upper-bounded wildcard <? extends T> concept in Java.
जावा प्रोग्राम में अप्पर बॉंडेड वाइल्डकार्ड <? extends T> का अर्थ है की
मौजूदा जावा प्रोग्राम में क्लास डाटा टाइप T या T का कोई सबक्लास डिफाइन है.
Example of an upper-bounded wildcard in Java.
List<? extends Number>
यहाँ इसमें अप्पर बॉंडेड वाइल्डकार्ड का मतलब हो सकता है.
- List<Integer> इन्टिजर डाटा टाइप क्लास मेथड के लिए
- List<Double> डबल डाटा टाइप क्लास मेथड के लिए
- List<Float> फ्लोट डाटा टाइप क्लास मेथड के लिए
- List<Long> लॉन्ग डाटा टाइप क्लास मेथड के लिए
याद रहे, क्योंकि इसमें ये डाटा टाइप एक Number वैल्यूज डाटा एलिमेंट को एक्सटेंड करते हैं।
Example of an upper-bounded wildcard.
import java.util.List;
import java.util.Arrays;
public class Main {
public static void previewNumbers(
List<? extends Number> numbers) {
for (Number n : numbers) {
System.out.println(n);
}
}
public static void main(String[] args) {
List<Integer> integers =
Arrays.asList(444, 233, 989);
List<Double> doubles =
Arrays.asList(109.87, 123.34, 307.43);
System.out.println(“Integer Data type Values.”);
previewNumbers(integers);
System.out.println(“\nDouble Data type Values.”);
previewNumbers(doubles);
}
}
Why can’t we add in this example?
List<? extends Number> numbers =
new ArrayList<Integer>();
numbers.add(89); //
यहाँ जावा कंपाइलर को सही सबटाइप नहीं पता है। यह List<Double>, List<Integer>, दोनों में से एक डाटा टाइप नेचर हो सकता है।
लेकिन इसमें इसे सिक्योर रूप से रीड करना है.
Number n = numbers.get(0);
The main idea behind the upper-bounded wildcard.
<? extends T>
↓
डाटा वैल्यू को रीड करे
↓
T या सबक्लास
The lower-bounded wildcard <? super T> concept in Java.
जावा प्रोग्राम में लोअर बॉंडेड वाइल्डकार्ड <? super T> का अर्थ है की
T या T का कोई सुपरक्लास नेचर डिफाइन के लिए है.
Example of a lower-bounded wildcard.
List<? super Integer>
यहाँ लोअर बॉंडेड वाइल्डकार्ड का मतलब हो सकता है.
- List<Integer> इन्टिजर डाटा टाइप क्लास मेथड के लिए
- List<Number> लिस्ट नंबर्स डाटा टाइप क्लास मेथड के लिए
- List<Object> लिस्ट ऑब्जेक्ट डाटा टाइप क्लास मेथड के लिए
Example of a lower-bounded wildcard.
public static void addNumbers(
List<? super Integer> list) {
list.add(7);
list.add(9);
list.add(11);
}
जावा में इसका इस्तेमाल।
List<Integer> integers =
new ArrayList<>();
List<Number> numbers =
new ArrayList<>();
List<Object> objects =
new ArrayList<>();
addNumbers(integers);
addNumbers(numbers);
addNumbers(objects);
यहाँ Integer डाटा टाइप वैल्यू ऐड करना सेफ़ है।
list.add(19); //
लेकिन आप इसे रीड करते समय, जावा यूजर सेफ़ली वैल्यू को सिर्फ़ Object वैल्यू कर सकते हैं.
Object value = list.get(0);
Difference between extends and super in Java wildcards.
यह जावा वाइल्डकार्ड यूज़ में सबसे ज़रूरी एलिमेंट है।
extends
List<? extends Number>
Means.
Number variable
↑
Integer
Double data type
Float data type
Long data type
जावा यूजर इसमें वैल्यू को Number के रूप में रीड कर सकते हैं, लेकिन सामान्य रूप से वैल्यू ऐड नहीं कर सकते है।
super
List<? super Integer>
Means:
Object
↑
Number
↑
Integer
जावा यूजर सेफ़ली इसमें Integer वैल्यू को ऐड कर सकते हैं, लेकिन रीड करते समय, सेफ़ टाइप Object है।
PECS rule concept in Java wildcards.
जावा प्रोग्रामिंग लैंग्वेज में मल्टीप्ल यूज़ वाइल्डकार्ड को याद रखने का एक बहुत ही आसान रूल है.
PECS = प्रोड्यूसर एक्सटेंड्स, कंज्यूमर सुपर
Producer → Extends.
यदि इसमें कोई कलेक्शन डाटा टाइप ऑब्जेक्ट आपके सोर्स कोड के लिए कोई वैल्यू बनाता/देता है, तो इसमें आप एक्सटेंड्स मेथड का यूज़ करें।
List<? extends Number>
जावा यूजर मुख्य रूप से इससे रीड करते हैं।
Consumer → super.
यदि आपके प्रोग्राम में कोई कलेक्शन डाटा टाइप मेथड आपके सोर्स कोड से वैल्यू लेता/लेता है, तो इसमें आप सुपर मेथड का यूज़ करें।
List<? super Integer>
आप मुख्य रूप से इसमें जोड़ते हैं।
Comparison Of All Java Wildcard and Its Methods
| # | All popular java wildcard | Their meaning | Read as | Add allow/not |
| 1. | <?> – Unbounded generics wildcard | Support Any class data type | Object | Generally, no |
| 2. | <? extends T> – Upper-bounded generics wildcard. | Support only T or subclass | As T | Generally, no |
| 3. | <? super T> – Lower-bounded generics wildcard. | Support only T or superclass | As Object | T is safe |
In Java, you can read this with a simple memory trick.
- ? → कोई भी वाइल्डकार्ड डाटा टाइप मेथड के लिए इसे यूज़ करे.
- ? extends T → T या चाइल्ड → READ डाटा टाइप मेथड के लिए इसे यूज़ करे.
- ? super T → T या पैरेंट → WRITE डाटा टाइप मेथड के लिए इसे यूज़ करे.
Example.
List<? extends Number> wildcard.
Think of it as an unbounded generics wildcard.
“मुझे एक Number या इसके चाइल्ड दो; मैं इसे पढ़ना चाहता हूँ।”
List<? super Integer>
Think of it as a lower-bounded generics wildcard.
“मुझे Integer या इसके पैरेंट दो; मैं Integer वैल्यू को ऐड करना चाहता हूँ।”
Example of a simple wildcard method in Java.
List<Integer> numbers =
Arrays.asList(1, 5, 7, 9);
List<? extends Number> readList = numbers;
Number n = readList.get(0);
यहाँ हमारे लिए extends का यूज़ सही है, क्योंकि इसमें हम डाटा को रीड कर रहे हैं।
To write it in the proper order.
List<Integer> numbers =
new ArrayList<>();
List<? super Integer> writeList = numbers;
writeList.add(19);
writeList.add(77;
इस एक्साम्प्ल में super लोअर-बाउंडेड जेनेरिक्स वाइल्डकार्ड मेथड सही है, क्योंकि इसमें हम कुछ वैल्यू को ऐड कर रहे हैं/लिख रहे हैं।
Conclusion of Wildcards ?, extends, super In Java.
<?> Unbounded generics wildcard.
→ इसे जावा यूजर अनजान डाटा टाइप क्लास मेथड के लिए यूज़ करे.
→ इसे जावा यूजर ऑब्जेक्ट के तौर पर रीड कर सकते हैं
<? extends T> Upper-bounded generics wildcard.
→ इसे जावा यूजर T या सबक्लास के रूप में रीड कर सकते है.
→ यह जावा क्लास में डाटा टाइप मेथड को रीड करने के लिए सबसे अच्छा है.
→ यह एक जावा प्रोग्राम डाटा टाइप प्रोड्यूसर है.
<? super T> Lower-bounded generics wildcard.
→ इसे जावा यूजर T या सुपरक्लास के रूप में रीड कर सकते है.
→ जावा क्लास में वैल्यू जोड़ने/लिखने के लिए यह सबसे अच्छा है.
→ यह एक जावा प्रोग्राम डाटा कंज्यूमर है.
Remember this– PECS → प्रोड्यूसर एक्सटेंड्स, कंज्यूमर सुपर आदि सीक्वेंस या फॉर्मेट में।

