दिलचस्प पोस्ट
एचटीटीपी जांच अगर ऑडियो बज रहा है? क्या डेटाबेस में सामान्यीकृत फ़ोन नंबर संचय करने के लिए कोई मानक है? प्रदर्शन: इनलाइन-ब्लॉक अतिरिक्त मार्जिन ओएस स्तरीय सिस्टम जानकारी प्राप्त करें बॉल टू बॉल टकराव – डिटेक्शन और हैंडलिंग पांडा: ऑपरेटर चेनिंग के साथ डेटाफ़्रेम के फ़िल्टर पंक्तियाँ WebClient जावास्क्रिप्ट चलाता है वास्तविक सूची ऑब्जेक्ट में एक स्ट्रिंग का प्रतिनिधित्व करने वाली सूची को परिवर्तित करना फिट करने के लिए एक दृश्य में पाठ स्केल करें? एकाधिक पैरामीटर को mysqli क्वेरी में बाँधें सर्वर प्रमाणपत्र सत्यापन विफल। CAfile: /etc/ssl/certs/ca-certificates.crt CRL फ़ाइल: कोई नहीं सरल VBA कोड मुझे समय त्रुटि चलाने के लिए देता है 91 वस्तु चर या ब्लॉक सेट के साथ नहीं कैसे सी में सूचक द्वारा एक 2 डी सरणी को पारित करने के लिए? कॉलबैक फ़ंक्शन के साथ मैं टाइपस्क्रिप्ट में लेक्सिकल गुंजाइश कैसे बचा सकता हूँ "स्थिर" और "स्थिर इनलाइन" फ़ंक्शन के बीच अंतर क्या है?

जावा जेनेरिक्स – पुल विधि?

जावा जेनेरिक्स से संबंधित "पुल विधि" अवधारणा को कुछ कहा जाता है, मुझे एक बिंदु पर रोक दिया गया और इसके बारे में सोच रहा था।

बीटीडब्ल्यू, मैं केवल यह जानता हूं कि यह बाइटकोड स्तर पर होता है और हमारे लिए उपयोग करने के लिए उपलब्ध नहीं है।

लेकिन जावा संकलक द्वारा उपयोग किए गए "पुल विधि" के पीछे की अवधारणा को जानने के लिए मैं उत्सुक हूं।

पर्दे के पीछे क्या वास्तव में होता है और इसका उपयोग क्यों किया जाता है?

एक उदाहरण के साथ कोई मदद काफी सराहना की जाएगी

Solutions Collecting From Web of "जावा जेनेरिक्स – पुल विधि?"

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

इसकी कल्पना करें:

public class MyComparator implements Comparator<Integer> { public int compare(Integer a, Integer b) { // } } 

यह अपने कच्चे रूप में इस्तेमाल नहीं किया जा सकता है, जो तुलना करने के लिए दो Object पारित करते हैं, क्योंकि प्रकार की तुलना पद्धति में संकलित होती है (यह क्या होता है इसके विपरीत यह एक सामान्य प्रकार पैरामीटर टी, जहां प्रकार मिट जाएगा)। इसके बजाए, परिदृश्य के पीछे, कंपाइलर एक "पुल विधि" जोड़ता है, जो ऐसा कुछ दिखता है (यह जावा स्रोत था):

 public class MyComparator implements Comparator<Integer> { public int compare(Integer a, Integer b) { // } //THIS is a "bridge method" public int compare(Object a, Object b) { return compare((Integer)a, (Integer)b); } } 

कंपाइलर पुल विधि तक पहुंच की रक्षा करता है, जो स्पष्ट कॉल को सीधे लागू करता है, जिसके परिणामस्वरूप एक संकलन समय त्रुटि होती है। अब क्लास अपने कच्चे रूप में भी इस्तेमाल किया जा सकता है:

 Object a = 5; Object b = 6; Comparator rawComp = new MyComparator(); int comp = rawComp.compare(a, b); 

यह क्यों आवश्यक है?

कच्चे प्रकारों के स्पष्ट उपयोग के लिए समर्थन जोड़ने के अलावा (जो मुख्यत: पीछे की संगतता के लिए है) पुल के तरीकों को भी प्रकार के विलोपन को समर्थन देने के लिए आवश्यक है। प्रकार के विस्मरण के साथ, इस तरह एक विधि:

 public <T> T max(List<T> list, Comparator<T> comp) { T biggestSoFar = list.get(0); for ( T t : list ) { if (comp.compare(t, biggestSoFar) > 0) { biggestSoFar = t; } } return biggestSoFar; } 

वास्तव में इस के साथ संगत है बाइटकोक में संकलित:

 public Object max(List list, Comparator comp) { Object biggestSoFar = list.get(0); for ( Object t : list ) { if (comp.compare(t, biggestSoFar) > 0) { //IMPORTANT biggestSoFar = t; } } return biggestSoFar; } 

यदि पुल विधि मौजूद नहीं है और आपने इस फ़ंक्शन के लिए एक List<Integer> और एक MyComparator पास किया है, तो टैग किए गए टैग पर कॉल विफल होगा क्योंकि MyComparator पास कोई विधि नहीं होती है जो कि दो Object लेती है … केवल एक कि दो Integer एस लेता है

नीचे दिए गए प्रश्न एक अच्छी पढें हैं।

यह भी देखें:

  • जेनरिक्स एफएक्यू – एक पुल विधि क्या है?
  • जावा पुल विधियों समझाया (धन्यवाद @ बुजो )

यह ध्यान देने योग्य है कि कंपाइलर ने MyComparator की विधि का अनुमान MyComparator :

 public int compare(Integer a, Integer b) {/* code */} 

ओवरराइड करने की कोशिश कर रहा है Comparator<T> 's

 public int compare(T a, T b); 

घोषित प्रकार Comparator<Integer> अन्यथा, MyComparator की compare कंपाइलर द्वारा एक अतिरिक्त (ओवरलोडिंग) के रूप में की जाएगी, और ओवरराइड करने वाला नहीं, विधि। और इस तरह, इसके लिए कोई पुल पद्धति नहीं बनाई जाएगी।