2012-07-24 12 views
5

संभव डुप्लिकेट:
Why aren't Java Collections remove methods generic?जावा संग्रह LinkedList समारोह तर्क प्रकार

मैंने देखा है कि LinkedList आपरेशन के कुछ के रूप में ले जेनेरिक पैरामीटर प्रकार ई जबकि कुछ ले 'वस्तु' पैरामीटर। पूर्व के लिए,

add(E e) 
remove(Object o) 

क्या ऐसा करने का कोई विशिष्ट कारण है? क्यों नहीं 'निकालें' एक सामान्य प्रकार ई ले लो। (मुझे पता है कि यह टाइप एरर के बाद कोई फर्क नहीं पड़ता, लेकिन बस सोच रहा है)।

उत्तर

0

संग्रह इंटरफ़ेस से दोनों जोड़ और निकालें विधियां विरासत में मिली हैं। निकास विधि को सामान्य तर्क के साथ पुन: संसाधित नहीं किया गया था क्योंकि इससे कोई फर्क नहीं पड़ता। निकालें संग्रह की प्रकार की सुरक्षा को प्रभावित नहीं करता है और जब आप ग्रह पर सबसे लोकप्रिय एपीआई में से किसी एक को बदल रहे हैं, तो कम परिवर्तन बेहतर होते हैं। आप देखेंगे कि शामिल विधि को भी वही भाग्य भुगतना पड़ा।

+0

"क्योंकि इससे कोई फर्क नहीं पड़ता" यह * मायने रखता है। विभिन्न प्रकार के ऑब्जेक्ट बराबर हो सकते हैं। – newacct

+0

यह _won't_ कोई फर्क नहीं पड़ता क्योंकि विभिन्न प्रकार की वस्तुओं को पैरामीटरयुक्त संग्रह में कभी भी जोड़ा नहीं जा सकता है, इसलिए यह आवश्यक है कि निकालने की विधि पैरामीटरकृत हो, आपको कुछ भी लाभ न हो। –

+0

मैंने संग्रह में जोड़े गए चीज़ों के बारे में कुछ भी नहीं कहा। यह सिर्फ इतना है कि 'निकालें()' विधि की परिभाषा की आवश्यकता है कि यह उस चीज को हटा दें जो पास की गई चीज़ के बराबर है – newacct

0

क्योंकि कॉलर किसी भी प्रकार की ऑब्जेक्ट का उपयोग करके remove या contains पर कॉल कर सकता है और कोड अभी भी ठीक प्रदर्शन करेगा। संकलन समय अनुबंध जो संग्रह के प्रकार पैरामीटर का उपयोग करता है केवल गारंटी देता है * में संग्रह दिया गया प्रकार का होगा। इससे कोई परवाह नहीं है कि क्या आप इसे पूछते हैं कि इसमें एक अलग प्रकार का ऑब्जेक्ट है या नहीं।

* नाइटपिकर का कॉर्नर, मुझे पता है कि जावा जेनरिक वास्तव में गारंटी नहीं है। मुझे लगता है कि अधिक वाक्य रचनात्मक चीनी।

1

इसका कारण यह है समानता के लिए हटाने आपरेशन चेकों equals() पद्धति का उपयोग करके और equals() विधि पैरामीटर सामान्य नहीं के रूप में एक वस्तु में ले जाता है।

संबंधित मुद्दे