प्रभावी जावा कहते हैं:
// संभावित सुरक्षा छेद!
स्थिर सार्वजनिक अंतिम चीज [VALUES = {...};
क्या कोई मुझे बता सकता है कि सुरक्षा छेद क्या है?
स्थिर अंतिम सार्वजनिक फ़ील्ड घोषित करना आमतौर पर एक वर्ग स्थिरांक की पहचान है यह आदिम प्रकारों (ints, doubles आदि।) के लिए बिल्कुल ठीक है, और अपरिवर्तनीय वर्ग, जैसे स्ट्रिंग और java.awt.Color
। सरणियों के साथ, यह समस्या यह है कि सरणी संदर्भ स्थिर है, फिर भी सरणी के तत्वों को अभी भी बदला जा सकता है, और जैसा कि यह एक क्षेत्र है, परिवर्तन बेतरतीब हैं, अनियंत्रित हैं, और आमतौर पर अपरिचित हैं।
यह, सरणी फ़ील्ड की दृश्यता को निजी या पैकेज निजी के लिए प्रतिबंधित किया जा सकता है, इसलिए संदिग्ध संशोधन की तलाश करते समय आपके पास कोड का एक छोटा हिस्सा है। वैकल्पिक रूप से, और अक्सर बेहतर, सरणी के साथ एक साथ समाप्त करना और 'सूची' या अन्य उचित संग्रह प्रकार का उपयोग करना है। एक संग्रह का उपयोग करके, आप नियंत्रित करते हैं कि अगर अपडेट की अनुमति है, क्योंकि सभी अपडेट विधियों के माध्यम से जाते हैं। आप Collections.unmodifiableList ()
का उपयोग कर अपने संग्रह को लपेटकर अपडेट को रोका जा सकता है। लेकिन सावधान रहें कि भले ही संग्रह अपरिवर्तनीय हो, आपको यह भी सुनिश्चित करना चाहिए कि इसमें संग्रहीत प्रकार भी अपरिवर्तनीय हो सकते हैं या फिर एक अनन्य परिवर्तन के जोखिम वाले जोखिम के जोखिम को फिर से देखना होगा।
Comments
Post a Comment