यह एक पुराना सवाल है, लेकिन मुझे लगा कि मैं अपने 2 सेंट का योगदान किसी भी तरह से करूंगा क्योंकि आज यह बातचीत हुई है।
यह बिल्कुल जवाब नहीं देता कि कोई कमी क्यों नहीं है? लेकिन अपनी कक्षाओं को अपरिवर्तनीय कैसे बनाया जाए। (दुर्भाग्य से मुझे स्वीकृत जवाब के लिए टिप्पणी के रूप में पोस्ट करने के लिए अभी तक पर्याप्त प्रतिष्ठा नहीं है)
किसी वस्तु पर अपरिवर्तनीयता की गारंटी देने का तरीका यह है कि आप अपनी कक्षाओं को अधिक सावधानी से डिज़ाइन करें। इसके लिए एक उत्परिवर्ती वर्ग की तुलना में थोड़ी अधिक देखभाल की आवश्यकता होती है।
यह जोश बलोच के प्रभावी जावा आइटम 15 पर वापस जाता है - कम से कम उत्परिवर्तन । यदि आपने पुस्तक नहीं पढ़ी है, तो एक कॉपी उठाइए और कुछ समय के लिए पढ़िए, मैं गारंटी देता हूं कि यह आपकी लाक्षणिक "जावा गेम" होगी ।
आइटम 15 बलोच में सुझाव दिया गया है कि आपको ऑब्जेक्ट की स्थिति सुनिश्चित करने के लिए कक्षाओं की पारस्परिकता को सीमित करना चाहिए।
पुस्तक को सीधे उद्धृत करने के लिए:
एक अपरिवर्तनीय वर्ग बस एक ऐसा वर्ग है जिसके उदाहरणों को संशोधित नहीं किया जा सकता है। प्रत्येक उदाहरण में शामिल सभी जानकारी तब प्रदान की जाती है जब इसे बनाया जाता है और ऑब्जेक्ट के जीवनकाल के लिए तय किया जाता है। जावा प्लेटफ़ॉर्म पुस्तकालयों में कई अपरिवर्तनीय कक्षाएं शामिल हैं, जिनमें स्ट्रिंग, बॉक्सिंग आदिम कक्षाएं और बिगइन्टे- जीर और बिगडेसीमल शामिल हैं। इसके कई अच्छे कारण हैं: अपरिवर्तनीय कक्षाएं म्यूटेबल कक्षाओं की तुलना में डिजाइन, कार्यान्वयन और उपयोग में आसान हैं। वे त्रुटि के लिए कम प्रवण हैं और अधिक सुरक्षित हैं।
बलोच ने 5 सरल नियमों का पालन करके अपनी कक्षाओं को अपरिवर्तनीय बनाने का वर्णन किया है:
- ऑब्जेक्ट की स्थिति को संशोधित करने वाली कोई विधि प्रदान न करें (अर्थात, बसने वाले, उर्फ म्यूटेटर )
- सुनिश्चित करें कि कक्षा को बढ़ाया नहीं जा सकता है (इसका अर्थ है कि कक्षा को ही घोषित करना
final
)।
- सभी क्षेत्र बनाओ
final
।
- सभी क्षेत्र बनाओ
private
।
- किसी भी परिवर्तनशील घटकों के लिए विशेष पहुंच सुनिश्चित करें। (वस्तुओं की रक्षात्मक प्रतियां बनाकर)
अधिक जानकारी के लिए मैं पुस्तक की एक प्रति लेने की सलाह देता हूं।
const
कीवर्ड, लेकिन कोई अंतर्निहित सुविधा है। तदनुसार अपने शीर्षक और टैग को ठीक किया।