कार्य जो नव निर्मित अस्थायी वस्तुओं के "अनन्य स्वामित्व" वापस अक्सर सबसे विशिष्ट प्रकार व्यावहारिक होना चाहिए; जो अपरिवर्तनीय वस्तुओं को वापस करते हैं, खासकर यदि उन्हें साझा किया जा सकता है, तो अक्सर कम-विशिष्ट प्रकारों को वापस करना चाहिए।
भेद का कारण यह है कि पूर्व मामले में, एक वस्तु हमेशा संकेतित प्रकार की एक नई वस्तु का उत्पादन करने में सक्षम होगी, और चूंकि प्राप्तकर्ता ऑब्जेक्ट का मालिक होगा और कोई यह नहीं बताएगा कि प्राप्तकर्ता क्या काम कर सकता है निष्पादित करने के लिए, ऑब्जेक्ट को वापस लौटने वाले कोड के लिए कोई रास्ता नहीं होगा, यह जानने के लिए कि कोई वैकल्पिक इंटरफ़ेस कार्यान्वयन प्राप्तकर्ता की ज़रूरतों को पूरा कर सकता है या नहीं।
बाद के मामले में, तथ्य यह है कि ऑब्जेक्ट अपरिवर्तनीय है कि फ़ंक्शन एक वैकल्पिक प्रकार की पहचान करने में सक्षम हो सकता है जो सबकुछ कर सकता है और अधिक जटिल प्रकार अपनी सटीक सामग्री दे सकता है। उदाहरण के लिए, Immutable2dMatrix
इंटरफ़ेस को ImmutableArrayBacked2dMatrix
वर्ग और ImmutableDiagonal2dMatrix
कक्षा द्वारा कार्यान्वित किया जा सकता है। एक स्क्वायर Immutable2dMatrix
को वापस करने वाला एक फ़ंक्शन ImmutableDiagonalMatrix
उदाहरण वापस करने का निर्णय ले सकता है यदि मुख्य विकर्ण से सभी तत्व शून्य हो जाते हैं, या ImmutableArrayBackedMatrix
नहीं है। पूर्व प्रकार में बहुत कम भंडारण स्थान लगेगा, लेकिन प्राप्तकर्ता को उनके बीच के अंतर की परवाह नहीं करनी चाहिए।
कंक्रीट ImmutableArrayBackedMatrix
के बजाय Immutable2dMatrix
लौटने पर कोड को सरणी के आधार पर रिटर्न प्रकार चुनने की अनुमति मिलती है; इसका यह भी अर्थ है कि यदि कोड को सरणी वापस करने के लिए माना जाता है तो Immutable2dMatrix
का उपयुक्त कार्यान्वयन हो रहा है, यह एक नया उदाहरण बनाने के बजाय इसे वापस कर सकता है। अपरिवर्तनीय वस्तुओं के साथ काम करते समय इन दोनों कारकों में प्रमुख "जीत" हो सकती है।
म्यूटेबल ऑब्जेक्ट्स के साथ काम करते समय, न तो कारक खेलता है। तथ्य यह है कि एक उत्परिवर्तनीय सरणी में उत्पन्न होने पर मुख्य विकर्ण से कोई तत्व नहीं हो सकता है इसका मतलब यह नहीं है कि इसका कोई भी तत्व कभी नहीं होगा। नतीजतन, ImmutableDiagonalMatrix
प्रभावी रूप से Immutable2dMatrix
का उपप्रकार है, MutableDiagonalMatrix
Mutable2dMatrix
का उपप्रकार नहीं है, क्योंकि बाद वाला मुख्य विकर्ण से स्टोर स्वीकार कर सकता है जबकि पूर्व नहीं हो सकता है। इसके अलावा, जबकि अपरिवर्तनीय वस्तुएं अक्सर साझा की जा सकती हैं और साझा की जानी चाहिए, म्यूटेबल ऑब्जेक्ट्स आम तौर पर नहीं कर सकते हैं। एक फ़ंक्शन जिसे कुछ सामग्री के साथ शुरू किए गए नए म्यूटेबल संग्रह के लिए कहा जाता है, उसे एक नया संग्रह बनाने की आवश्यकता होगी, चाहे उसका बैकिंग स्टोर अनुरोध किए जा रहे प्रकार से मेल खाता हो या नहीं।
जावाडोक से: "_ एक सरणी सूची पुन: प्रस्तुत करता है [...] _"। उन्होंने 'एरेलेलिस्ट' वापस करने के लिए एपीआई को लॉक करने का फैसला क्यों किया, और हम 'कलेक्शन' के स्रोत कोड को देखते समय भी संभवतः इस प्रश्न का उत्तर नहीं दे सकते। – Laf
हो सकता है क्योंकि enums के क्रम को बनाए रखा जाना चाहिए? आपके प्रश्न में दिए गए लिंक में इसका उल्लेख किया गया है, _ निर्दिष्ट गणना द्वारा लौटाए गए तत्वों को समेकित करता है जिसमें वे enumeration_ –
@ Amit.rk3 द्वारा वापस लौटाए गए क्रम में एक सूची [http://docs.oracle.com) /javase/7/docs/api/java/util/List.html) आपके द्वारा चुने गए कार्यान्वयन को हमेशा आदेश देता है। –