के अप्रचलित दृश्य में मेरे पास एक निजी क्षेत्र वाला एक वर्ग है जो एक परिवर्तनीय संग्रह है। इस विशेष उदाहरण में फ़ील्ड ArrayBuffer
है, हालांकि मेरा प्रश्न किसी भी सीमित, आदेशित, यादृच्छिक-पहुंच संग्रह प्रकार तक फैला हुआ है। मैं दूसरों को इसे संशोधित करने की इजाजत दिए बिना इस क्षेत्र का खुलासा करना चाहता हूं। जावा मेंएक परिवर्तनीय स्कैला संग्रह
private List<T> theList;
public List<T> getList() {
return Collections.unmodifiableList(theList);
}
हम सिर्फ स्वीकार करते हैं कि परिणाम एक List
कि पूरी तरह से List
इंटरफ़ेस को लागू नहीं करता है क्योंकि #add
और दोस्तों UnsupportedOperationException
फेंक है: जावा में मैं की तरह एक विधि जोड़ना होगा।
स्काला में, मैं iterator
, size
, और apply
लेकिन कोई mutators (सूचकांक के आधार पर मानों पुन: प्राप्त करने के लिए) की तरह accessors साथ एक उचित विशेषता पाने की उम्मीद करेंगे। क्या ऐसा कोई प्रकार मौजूद है जो मुझे अभी तक नहीं मिला है?
की तरह कुछ है '.toector' विधि जो आप चाहते हैं? यह 'वेरेक्टर' के रूप में 'ऐरेबफर' में मानों की प्रतिलिपि वापस कर देगा जो अपरिवर्तनीय है और तेज़ यादृच्छिक पहुंच का समर्थन करता है। ('.toVector' केवल 2.9.2 के लिए स्कैला 2.10 में है, आप 'वेक्टर() ++ myArrayBuffer' जैसे कुछ कर सकते हैं) – adelbertc
संग्रह का आकार हजारों में हो सकता है। क्या यह अपरिवर्तनीय संग्रह प्रतिलिपि में मेरे विचलन को न्यायसंगत साबित करने के लिए पर्याप्त है? –
आपका जावा उदाहरण एक अपरिवर्तनीय सूची नहीं बनाता है। यह सिर्फ एक immutabl-ish wrapper में एक mutable सूचियों को छुपाता है। अंतर्निहित सूची का संदर्भ रखने वाला कोई भी वस्तु अभी भी इसे बदल सकता है ... यदि यह आपके लिए पर्याप्त है, तो आप आसानी से एक ही दृष्टिकोण को कार्यान्वित कर सकते हैं ... – paradigmatic