immutability - How to make the return immutable in JAVA -
मेरे पास एक वस्तु है जैसे
सार्वजनिक वर्ग एबीसी {निजी स्ट्रिंग ए; निजी स्ट्रिंग बी; निजी स्ट्रिंग सी; // getters और setters} इस ऑब्जेक्ट को संग्रह में एक विधि से लौटा दिया गया है जैसे कि ArrayList & lt; ABC & gt; । मैं बस वस्तु में कुछ भी बदले बिना अपरिवर्तनीय वापसी करना चाहते हैं क्या कोई भी इस के साथ मेरी मदद कर सकता है?
वस्तुएं हमेशा अपनी कक्षाओं द्वारा परिभाषित सभी क्षमताओं की पेशकश करती हैं। इसलिए, यदि आप एक अपरिवर्तनीय वस्तु चाहते हैं तो आपको एक अपरिवर्तनीय वर्ग की आवश्यकता है। यदि आप प्रश्न में वर्ग को नहीं बदल सकते हैं, तो आवरण वर्ग जैसे कि @ डफिमो वर्णित उस उद्देश्य को पूरा कर सकता है। ध्यान दें, हालांकि, इस तरह के वर्ग की वस्तुओं को लिपटे हुए वर्ग के ऑब्जेक्ट्स के साथ परस्पर विनिमय करना नहीं होता है, और यह भी कि किसी भी तरह आप को रैपर लागू करने की आवश्यकता होती है। यदि आपको आवश्यकता है वर्ग एबीसी की वस्तुओं के साथ पूरी तरह से विनिमेय वस्तुएं हैं, तो आप इस तथ्य से चिपक रहे हैं कि एबीसी अस्थिर है, इसलिए एबीसी के साथ परस्पर विनिमय करने योग्य कुछ अस्थिर है, कम से कम एबीसी के अयोग्य पहलुओं के संबंध में। तो यह नीचे आता है कि आप अपरिवर्तनीयता क्यों चाहते हैं यदि बिंदु सूची द्वारा संदर्भित वस्तु को उत्परिवर्तित करने से बचने के लिए है, तो उन वस्तुओं की प्रतिलिपि बनाना (जो भी गहराई उपयुक्त है) एक विकल्प है। तीसरे विकल्प के रूप में, यदि लक्ष्य वर्ग में कोई गैर-निजी क्षेत्र नहीं हैं, तो आप एक उपवर्ग बनाने में सक्षम हो सकते हैं, सेटर्स को अप्रभावी होने के लिए ओवरराइड कर सकते हैं या कुछ अनियंत्रित अपवाद फेंक सकते हैं उस स्थिति में, ध्यान रखें कि
- ऐसा उपवर्ग अच्छा नहीं है, और इसके उदाहरण वास्तव में क्लास एबीसी के उदाहरणों के साथ परस्पर विनिमय नहीं किए जा सकते हैं।
- अगर कक्षा एबीसी में पहुंच योग्य गुण हैं अस्थिर प्रकारों (जैसे अस्थिर कंटेनर) का, फिर आपको उन वस्तुओं को उत्परिवर्तित होने से रोकने के लिए कुछ करने की आवश्यकता हो सकती है फिर से।
- हां, यह एक बड़ी गड़बड़ी है।
Comments
Post a Comment