Java Language Specification, section 8.4.2 लिखते हैं:
यह एक संकलन समय एक कक्षा में ओवरराइड-बराबर हस्ताक्षर (नीचे वर्णित) के साथ दो तरीकों घोषित करने के लिए त्रुटि है।
दो विधि हस्ताक्षर एम 1 और एम 2 ओवरराइड-समकक्ष आईएफएफ हैं या तो एम 1 एम 2 या एम 2 का सबनिग्नेचर एम 1 का सबनिग्नेचर है। यदि या तो
एम 2 एम 1 के समान हस्ताक्षर है, या
एम 1 के हस्ताक्षर एक ही है
एक विधि एम 1 के हस्ताक्षर एक विधि एम 2 के हस्ताक्षर के एक subsignature है एम 2 के हस्ताक्षर के क्षरण के रूप में।
जाहिर है, तरीकों बराबर हावी नहीं कर रहे हैं, के बाद से ArrayList<String>
ArrayList
(ArrayList<Integer>
का विलोपन) नहीं है।
तो विधियों की घोषणा कानूनी है। साथ ही, विधि आमंत्रण अभिव्यक्ति मान्य है, क्योंकि वहां सबसे विशिष्ट विधि है, क्योंकि तर्क प्रकारों से मेल खाने वाली केवल एक विधि है।
संपादित करें: यिशई सही ढंग से इंगित करता है कि इस मामले में एक और प्रतिबंध बारीकी से स्कर्ट किया गया है। Java Language Specification, section 8.4.8.3 लिखते हैं:
यह एक संकलन समय त्रुटि है अगर एक प्रकार घोषणा टी एक सदस्य विधि एम 1 है और एक विधि एम 2 टी में घोषित या टी इस तरह के के महाप्रकार मौजूद है जब निम्नलिखित शर्तें पूरी होल्ड:
- एम 1 और एम 2 का एक ही नाम है।
- m2 टी
- से सुलभ है एम 1 का हस्ताक्षर m2 के हस्ताक्षर का एक उपनिवेश (§8.4.2) नहीं है।
- एम 1 या कुछ विधि एम 1 ओवरराइड (प्रत्यक्ष या परोक्ष रूप से) एम 2 या कुछ विधि एम 2 ओवरराइड (प्रत्यक्ष या अप्रत्यक्ष रूप से) के समान मिटा है।
परिशिष्ट: ersure, और
लोकप्रिय धारणा के विपरीत उसके अभाव पर, विधि हस्ताक्षर में जेनरिक मिटाया नहीं कर रहे हैं। जेनिक्स बाइटकोड (जावा वर्चुअल मशीन का निर्देश सेट) में मिटा दिया गया है। विधि हस्ताक्षर निर्देश सेट का हिस्सा नहीं हैं; वे स्रोत कोड में निर्दिष्ट क्लास फ़ाइल में लिखे गए हैं। (एक तरफ के रूप में, इस जानकारी को प्रतिबिंब का उपयोग करके रनटाइम पर भी पूछताछ की जा सकती है)।
इसके बारे में सोचो: प्रकार पैरामीटर पूरी तरह से वर्ग फ़ाइलों से मिटा रहे थे, तो कैसे कर सकता है अपनी पसंद प्रदर्शन के आईडीई में कोड पूरा होने कि ArrayList.add(E)
प्रकार E
की एक पैरामीटर लेता है, और नहीं Object
(= E
का विलोपन) अगर आपके पास जेडीके स्रोत कोड संलग्न नहीं था? और संकलक कैसे संकलन त्रुटि को फेंकने के बारे में जानता है जब विधि तर्क का स्थिर प्रकार E
का उप प्रकार नहीं था?
कोड, के रूप में यह ऊपर निर्दिष्ट किया जाता है संकलन नहीं करना चाहिए:
यदि यह वास्तविक उपयोग केस है, तो मैं केवल एक विधि की सिफारिश करता हूं 'सार्वजनिक ए getFirst (ArrayList एसएस) {वापसी ss.get (0); } '... अगर यह चित्रण प्रयोजनों के लिए अभी विकसित हुआ है, तो –
पर जाएं ग्रहण में संकलन त्रुटि क्या है? – meriton
क्या आप लेख उद्धृत कर सकते हैं? – trashgod