मान लीजिए कि मैं एक ऐसी विधि लिख रहा हूं, जिसमें एक नक्शा वापस आ जाना चाहिए । उदाहरण के लिए:
public Map<String, Integer> foo() {
return new HashMap<String, Integer>();
}
कुछ समय के लिए इसके बारे में सोचने के बाद, मैंने फैसला किया है कि इस मैप को बनाते समय इसे संशोधित करने का कोई कारण नहीं है। इस प्रकार, मैं एक ImmutableMap वापस करना चाहूंगा ।
public Map<String, Integer> foo() {
return ImmutableMap.of();
}
क्या मुझे रिटर्न टाइप को जेनेरिक मैप के रूप में छोड़ना चाहिए, या क्या मुझे यह निर्दिष्ट करना चाहिए कि मैं एक इम्यूटेबल मैप लौटा रहा हूं?
एक तरफ से, यही कारण है कि इंटरफेस के लिए बनाया गया था; कार्यान्वयन विवरण छिपाने के लिए।
दूसरी ओर, अगर मैं इसे इस तरह छोड़ दूंगा, तो अन्य डेवलपर्स इस तथ्य को याद कर सकते हैं कि यह ऑब्जेक्ट अपरिवर्तनीय है। इस प्रकार, मैं अपरिवर्तनीय वस्तुओं के एक प्रमुख लक्ष्य को प्राप्त नहीं करूंगा; उन वस्तुओं की संख्या को कम करके कोड को अधिक स्पष्ट बनाने के लिए जो बदल सकते हैं। सबसे खराब समय के बाद भी, कोई व्यक्ति इस ऑब्जेक्ट को बदलने की कोशिश कर सकता है, और इसके परिणामस्वरूप रनटाइम त्रुटि होगी (कंपाइलर इसके बारे में चेतावनी नहीं देगा)।