2012-01-25 24 views
5

एक उदाहरण चर वर्तमान मैं एक वर्ग है जो अपरिवर्तनीय हैअचल स्थिति के रूप में ArrayList

मान लीजिए मैं प्रकार ArrayList के एक सदस्य चर के लिए एक गेटर विधि है जब। उस स्थिति में जब मुझे उस चर के संदर्भ मिलते हैं, तो मैं इससे तत्व जोड़ या निकाल सकता हूं। उस स्थिति में अपरिवर्तनीयता का उल्लंघन हो रहा है।

कोई भी इस अवधारणा को विवरण में समझा सकता है?

+2

देखें http://stackoverflow.com/questions/8892350/immutable-vs-unmodifiable-collection – Zaki

+1

जोशुआ ब्लोच का "प्रभावी जावा" भी देखें, आइटम 24: आवश्यकता होने पर रक्षात्मक प्रतियां बनाएं। अध्याय ऑनलाइन उपलब्ध है [यहां] (http://www.informit.com/articles/article.aspx?p=31551&seqNum=2) – mike9322

+0

यदि आप कक्षा को सभी अपरिवर्तनीय माना जाता है, तो सूची _in के संदर्भ को सहेजें 'unmodifiableList' के उदाहरण के रूप में आपकी class_ (प्रतिलिपि बनाने के बाद)। नहीं (अतिरिक्त) रक्षात्मक प्रतियों की आवश्यकता है, और यह रखरखाव के दौरान _your_ वर्ग को संशोधित करने से रोकता है। –

उत्तर

3

आप वास्तव में सही हैं। अपरिवर्तनीयता का उल्लंघन किया जाता है।

कक्षा को अपरिवर्तनीय बनाने के लिए, आपको यह सुनिश्चित करना होगा कि उसके सभी गेटर्स किसी भी वर्ग की सुरक्षित प्रतियां लौटाएं जिनके राज्य अन्यथा बदल सकते हैं।

3

आपको ArrayList प्रकार का चर प्रदान नहीं करना चाहिए। बस List प्रदान करें और सुनिश्चित करें कि गेटर अगले में से एक करता है:

  1. अपनी सूची
  2. की एक प्रति रिटर्न या unmodifiable सूची लौटाती है

या दोनों।

+1

सूची की एक प्रति दोनों लौटाना जो अनमोडिफाइड भी आवश्यक नहीं है –

0

यदि आप टाइप एक्स के उस बदले ऑब्जेक्ट का नया उदाहरण बनाते हैं, तो एक्स का उदाहरण अपरिवर्तनीय माना जाएगा। अगर आप अपने ऐरेलिस्ट पर विचार करते हैं तो यह समझना आसान है। आपके पास इस सूची को बदलने के तरीके हैं। प्रत्येक बदलती विधि इस सूची की एक प्रति बनाती है और नई प्रतिलिपि को जोड़/निकाल/अपडेट करती है और वापस लौटती है।

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

  • कोई संबंधित समस्या नहीं^_^