/ / बाध्य प्रकार के मापदंडों के साथ ऊपरी बाध्य वाइल्ड कार्ड के बीच क्या अंतर है? - जावा, जेनरिक, वाइल्डकार्ड

बाध्य प्रकार पैरामीटर वाले ऊपरी बाउंड वाले जंगली कार्ड के बीच क्या अंतर है? - जावा, जेनेरिक, वाइल्डकार्ड

दोनों प्रतिबंध तंत्र और जावा के रूप में उपयोग कर रहे हैंदस्तावेज़ कहते हैं कि ऊपरी बाध्य वाइल्ड कार्ड सभी उप वर्गों को चर के रूप में अनुमति देगा, जबकि बाध्य प्रकार पैरामीटर केवल घोषित वर्ग संदर्भ चर को ही स्वीकार करते हैं।

मेरा सवाल यह है कि। उदाहरण के लिए यदि हम लेते हैं Number सुपर क्लास और इसे एक बाउंड टाइप मापदंडों के रूप में घोषित किया गया है, आमतौर पर यह सब क्लास क्लास के सभी प्रकारों को भी व्यावहारिक परिदृश्य में स्वीकार करेगा, भले ही उपवर्ग प्रकार का हो। तो वाइल्ड कार्ड क्यों?

उत्तर:

जवाब के लिए 2 № 1

प्रलेखन के अनुसार The term List<Number> is more restrictive than List<? extends Number> because the former matches a list of type Number only, whereas the latter matches a list of type Number or any of its subclasses.

upperBounded

इस उदाहरण पर विचार करें

import java.util.Arrays;
import java.util.List;


public class Sample {

public static double sumOfList(List<? extends Number> list) {
double s = 0.0;
for (Number n : list)
s += n.doubleValue();
return s;
}
public static void main(String[] args) {
List<Double> ld = Arrays.asList(1.2, 2.3, 3.5);
System.out.println("sum = " + sumOfList(ld));
}

}

ऊपर अपेक्षा के अनुसार ठीक काम करता है लेकिन अगर आप इस लाइन को बदलते हैं public static double sumOfList(List<Number> list) {

तब यह लाइन शिकायत करेगी

System.out.println("sum = " + sumOfList(ld)); इसे नंबर में बदलें अर्थात् List<Number> ld या बदल सकते हैं

या उप में बदलें public static double sumOfList(List<Double> list) {