के डिफ़ॉल्ट मान को कैसे प्रबंधित करें मैं एक कक्षा बना रहा हूं जिसमें मैं व्यक्ति कहलाता हूं। व्यक्ति के क्षेत्र में से एक 'उपनाम' है जो ArrayList<String>
है। आखिरकार उपनाम को निम्नलिखित तर्क के अनुसार उपयोगकर्ता को प्रदर्शित किया जाएगा: यदि व्यक्ति के उपनाम हैं तो उन्हें [Finch, Wren, Admin, etc...]
के रूप में प्रदर्शित किया जाना चाहिए, अन्यथा UNKNOWN
प्रदर्शित होना चाहिए। अब तक मैं तीन तरीकों में से एक में इस लागू करने की कोशिश की है:एक ArrayList
व्यक्ति विधि
getAliases()
जो केवल ArrayList की एक प्रति रिटर्न के रूप में शामिल हैं। वांछित व्यवहार को लागू करने के लिए कॉलर रिक्त सरणी के लिए जांच करता है।व्यक्ति में
aliasesToString()
विधि शामिल है जिसे वांछित स्ट्रिंग का उत्पादन करने के लिए कहा जा सकता है।ArrayList<String>
का उपयोग करने के बजाय, उपनामDefaultableArrayList<T>
का कार्यान्वयन है। यह वर्ग ArrayList को बढ़ाता है और टाइप टी के साथ एक डिफ़ॉल्ट मान रखता है।toString()
विधि वांछित स्ट्रिंग का उत्पादन करने के लिए अतिप्रवाह है। वांछित व्यवहार का उत्पादन करने के लिए एप्लिकेशनsome_person.getAliases().toString()
पर कॉल करता है।public class DefaultableArrayList<T> extends ArrayList<T> { private static final long serialVersionUID = -6735356930885363889L; // Auto-generated private final T defaultElement; public DefaultableArrayList(T defaultElement) { super(); this.defaultElement = defaultElement; } public DefaultableArrayList(Collection<? extends T> c, T defaultElement) { super(c); this.defaultElement = defaultElement; } public DefaultableArrayList(int initialCapacity, T defaultElement) { super(initialCapacity); this.defaultElement = defaultElement; } public T getDefaultElement() { return defaultElement; } @Override public String toString() { if (!isEmpty()) { return super.toString(); } else { return defaultElement.toString(); } } }
क्या मुझे विकल्प 2 के बारे में चिंताओं और 3 कि मैं OOP दिशानिर्देशों का उल्लंघन, जबकि अनावश्यक जटिलता जोड़ने हो सकता है:
नीचे विकल्प 3 के अपने कार्यान्वयन है। क्या व्यक्ति वास्तव में चिंतित होना चाहिए कि क्या कोई उपनाम नहीं है और क्या यह उपनाम के लिए यह समझ में आता है कि यह अंततः आवेदन में कैसे कार्यान्वित किया जाता है? मुझे लगता है कि मुझे कॉलर को रिक्त मामले को संभालने देना चाहिए। मुझे कौन सा विकल्प चुनना चाहिए कि मानक ओओपी डिज़ाइन दिशानिर्देशों को सर्वोत्तम रूप से पूरा किया जाए? या क्या कोई चौथा विकल्प है जिसे मैंने नहीं माना है?
मैं एक अपरिवर्तनीय दृश्य वापस करना पसंद करूंगा: 'संग्रह .unmodifiableList (उपनाम)'। –
@JBNizet 'संग्रह .unmodifiableList (उपनाम) 'एक अच्छा विकल्प है। यह मूल इंस्टेंस सदस्य को संशोधित होने से बचाता है और यह विधि के कॉलर को स्पष्ट करता है कि वे उपनाम की सूची को म्यूट करके व्यक्ति उदाहरण को म्यूट नहीं कर सकते हैं। – Eran
हां, क्षमा करें, मेरा मतलब यह नहीं था कि मैं प्रत्यक्ष संदर्भ वापस कर दूंगा। वह एक निरीक्षण था। – Helios