मैं OracleDocGenericMethod से जेनेरिक विधियों के बारे में पढ़ रहा हूं । मैं तुलना के बारे में बहुत भ्रमित हूं जब यह कहता है कि वाइल्ड-कार्ड का उपयोग कब करना है और जेनेरिक विधियों का उपयोग कब करना है। दस्तावेज़ से उद्धृत करना।
interface Collection<E> { public boolean containsAll(Collection<?> c); public boolean addAll(Collection<? extends E> c); }
हम इसके बजाय यहाँ सामान्य तरीके इस्तेमाल कर सकते हैं:
interface Collection<E> { public <T> boolean containsAll(Collection<T> c); public <T extends E> boolean addAll(Collection<T> c); // Hey, type variables can have bounds too! }
[...] यह हमें बताता है कि बहुरूपता के लिए प्रकार तर्क का उपयोग किया जा रहा है; इसका एकमात्र प्रभाव विभिन्न तर्क स्थलों पर विभिन्न प्रकार के वास्तविक तर्क प्रकारों का उपयोग करने की अनुमति देना है। यदि ऐसा है, तो वाइल्डकार्ड का उपयोग करना चाहिए। वाइल्डकार्ड्स को लचीले सबटाइपिंग का समर्थन करने के लिए डिज़ाइन किया गया है, जो कि हम यहां व्यक्त करने की कोशिश कर रहे हैं।
क्या हमें नहीं लगता कि वाइल्ड कार्ड (Collection<? extends E> c);
भी इस तरह के बहुरूपता का समर्थन कर रहा है? फिर इसमें जेनेरिक पद्धति के उपयोग को अच्छा क्यों नहीं माना जाता है?
आगे जारी है, यह बताता है,
जेनेरिक विधियाँ एक या अधिक प्रकार के तर्कों के बीच निर्भरता को व्यक्त करने के लिए एक प्रकार के मापदंडों का उपयोग करने की अनुमति देती हैं और / या इसके वापसी प्रकार को। यदि इस तरह की निर्भरता नहीं है, तो जेनेरिक विधि का उपयोग नहीं किया जाना चाहिए।
इसका क्या मतलब है?
उन्होंने उदाहरण प्रस्तुत किया है
class Collections { public static <T> void copy(List<T> dest, List<? extends T> src) { ... }
[...]
हम इस तरीके के लिए एक और तरीका लिख सकते हैं, बिना वाइल्डकार्ड का उपयोग किए:
class Collections { public static <T, S extends T> void copy(List<T> dest, List<S> src) { ... }
दस्तावेज़ दूसरी घोषणा को हतोत्साहित करता है और पहले सिंटैक्स के उपयोग को बढ़ावा देता है? पहली और दूसरी घोषणा में क्या अंतर है? लगता है दोनों एक ही काम कर रहे हैं?
क्या कोई इस क्षेत्र पर प्रकाश डाल सकता है।
?
। आप इसे 'सार्वजनिक स्थैतिक <T1 संख्या के रूप में फिर से लिख सकते हैं, T2 संख्या> शून्य प्रति (सूची <T1> भाग्य, सूची <T2> src) का विस्तार करता है और इस मामले में यह स्पष्ट हो जाता है कि क्या चल रहा है।