के रूप में अमरूद अपरिवर्तनीय संग्रह का उपयोग मैं यह निर्धारित करने की कोशिश कर रहा हूं कि एक अपरिवर्तनीय सूची के लिए सर्वोत्तम प्रथा क्या होगी।विधि पैरामीटर और/या वापसी प्रकार
पूर्व:
public ImmutableCollection<Foo> getFooOne(ImmutableList<Foo> fooInput){
//.. do some work
ImmutableList<Foo> fooOther = // something generated during the code
return fooOther;
}
public Collection<Foo> getFooTwo(List<Foo> fooInput){
//.. do some work
List<Foo> fooOther = // something generated during the code
return ImmutableList.copyOf(fooOther);
}
public void doSomethingOne(){
ImmutableCollection<Foo> myFoo = getFooOne(myList);
...
someOtherMethod(myFoo);
}
public void doSomethingTwo(){
Collection<Foo> myFoo = getFooOne(myList);
...
someOtherMethod(myFoo);
}
मेरे सवाल: नीचे एक साधारण उदाहरण में मदद मिलेगी मेरे सवालों की दूरी पर है
कौन सा सबसे अधिक उपयुक्त एक आवेदन में उपयोग करने के लिए बनाता है? [doSomethingOne और getFooOne] या [doSomethingTwo और fooTwo]? दूसरे शब्दों में यदि आप जानते हैं कि आप ImmutableCollections का उपयोग कर रहे हैं, तो क्या यह आगे और आगे कास्टिंग रखने और copyOf() करने के लिए समझ में आता है, या बस हर जगह अपरिवर्तनीय उपयोग करें?
ये उदाहरण सार्वजनिक विधियां हैं जो दर्शा सकती हैं कि अन्य लोग उनका उपयोग करते हैं। यदि विधियां निजी थीं और आंतरिक रूप से उपयोग की जाती हैं तो क्या इनमें से कोई भी जवाब बदल जाएगा?
यदि कोई उपयोगकर्ता किसी अपरिवर्तनीय सूची में कुछ भी जोड़ने का प्रयास करता है तो एक अपवाद फेंक दिया जाएगा। क्योंकि उन्हें इस बारे में पता नहीं हो सकता है, क्या यह संग्रह के बजाय एक अपरिवर्तनीय चयन को स्पष्ट रूप से वापस करने के लिए और अधिक समझ में नहीं आता है?
आप यहां क्या करने की कोशिश कर रहे हैं? क्या आप इन सूचियों को संशोधित करने से आंतरिक और बाहरी कोड की रक्षा करने की कोशिश कर रहे हैं? क्या आप एक कदम वापस ले सकते हैं और कुछ पृष्ठभूमि प्रदान कर सकते हैं? धन्यवाद। – Gray
@ ग्रे: * "आप यहां क्या हासिल करने की कोशिश कर रहे हैं? क्या आप इन सूचियों को संशोधित करने से आंतरिक और बाहरी कोड की रक्षा करने की कोशिश कर रहे हैं?" * [एसआईसी] ... ओपी कुछ प्रसंस्करण के बाद एक अपरिवर्तनीय सूची लेना और वापस लेना चाहता है, एक और अपरिवर्तनीय सूची। * "संशोधन से कोड की रक्षा" * की तुलना में अपर्याप्तता के लिए * अधिक * अधिक है। अपरिवर्तनीयता के लाभ इतने विशाल हैं (अंतर्निहित थ्रेड-सुरक्षा, आसान समांतरता, आसान कैशिंग, राज्य को पुन: उत्पन्न करने में आसान इत्यादि) कि हाल ही की कई भाषाओं (क्लोजर, एफ #, ...) में अपरिवर्तनीयता मुक्त होती है। अपरिवर्तनीयता का उपयोग करने के लिए किसी की इच्छा को औचित्य देने के लिए * शून्य * आवश्यकता है;) – TacticalCoder
उह, निश्चित @TacticalCoder। मैं बस बेहतर समझना चाहता था कि लक्ष्य क्या था। यह सवाल मेरे लिए बहुत सटीक लगता है। यदि उसने यहां समझाया कि क्या पूरा करने की कोशिश कर रहा था, तो मुझे लगता है कि एक बेहतर जवाब संभव होगा। – Gray