/ / जावा कलेक्शन में जेनेरिक इतनी अजीब क्यों है? - जावा, जेनरिक, कंपाइलर-कंस्ट्रक्शन

जावा संग्रह में जेनेरिक इतनी अजीब क्यों है? - जावा, जेनेरिक, कंपाइलर-निर्माण

उदाहरण के लिए java.util.Collections में जाँच विधि

 public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

मैं इसे इस तरह क्यों परिभाषित कर सकता हूं:

 public static <T> int binarySearch(List<T> list, T key, Comparator<T> c)

यह जावा में काम क्यों नहीं करेगा?

उत्तर:

उत्तर № 1 के लिए 14

आप सकता है इसे इस तरह परिभाषित करें, लेकिन फिर वह आपको खोज नहीं करेगा List<Circle> इसका उपयोग करना Comparator<Shape>, उदाहरण के लिए।

मूल रूप से, यहां व्यक्त किए जा रहे विचरण प्रकार की सुरक्षा बनाए रखते हुए अधिक लचीलेपन की अनुमति देते हैं।


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

बढ़ाना जॉन स्कीट"जवाब थोड़ा सा, जावा की जेनेरिक C ++ की तरह नहीं हैंटेम्पलेट्स। जेवीएम की पिछड़ी अनुकूलता के लिए बनाए गए जेनेरिकों के लिए डिज़ाइन के कुछ निर्णय (जैसे टाइप इरेज़र), अजीब सिंटैक्स और जटिल उपयोग मामलों को जन्म देते हैं। इनमें से कुछ के बारे में आप यहां पढ़ सकते हैं।