2012-02-14 18 views
19

मैं वस्तुओं की एक ArrayList पैदा कर रहा हूँ। एक बार जब मैं इस ArrayList वस्तु "someArrayList" है के बाद कोडएक स्थिरांक में इस्तेमाल के लिए अंतिम रूप एक ArrayList वस्तु की घोषणा दाखिल

ArrayList someArrayList = new ArrayList(); 

Public ArrayList getLotOfData() 
{ 
ArrayList someData = new ArrayList(); 
return someData; 
} 


someArrayList = eDAO.getLotOfData(); 

है, मैं इसे सार्वजनिक और अंतिम घोषणा और एक स्थिरांक फ़ाइल में संग्रहीत करना इतना है कि यह विश्व स्तर पर पहुँचा जा सकता है करना चाहते हैं। क्या ऐसा कोई तरीका है जो मैं कर सकता हूं? अगर मैं एक ऐरेलिस्ट सूची सार्वजनिक और अंतिम घोषित करता हूं, तो मैं इसके लिए किसी भी मूल्य को पुन: असाइन नहीं कर पाऊंगा। मैंने कोशिश की निम्नलिखित

public final ArrayList anotherArrayList = new ArrayList(); 

anotherArrayList.addAll(someArrayList); 

मैं एक वैश्विक ArrayList वस्तु के रूप में इस "anotherArrayList" की दुकान और इसका इस्तेमाल करने के आशा व्यक्त की थी, लेकिन यह एक nullpointer अपवाद देता है। मैं इसे स्ट्रिंग स्थिर "ConstantsFile.anotherArrayList" की तरह उपयोग करना चाहता हूं। कोई विचार???

+0

कोई इस संपादित करें कर सकते हैं? –

+3

आप वास्तव में थोड़ा उलझन में हैं; एक परिवर्तनीय अंतिम घोषित करने का अर्थ केवल इतना है कि आप किसी अन्य संदर्भ को सेट नहीं कर सकते हैं, न कि आप इसमें ऑब्जेक्ट्स नहीं जोड़ सकते हैं। –

+0

@Dave ... मैं भी क्यों यह एक nullpointer अपवाद – Raghu

उत्तर

15

Guava इस कारण बस के बारे में के लिए ImmutableList प्रदान करता है। (इसके अलावा, यह अनावश्यक अंतरिक्ष भूमि के ऊपर है कि ArrayList भविष्य तत्व है जो आप अपने आवेदन के लिए जोड़ने नहीं किया जाएगा के लिए जगह बनाने के लिए आवंटित नहीं है।)

public static final ImmutableList<String> CONSTANTS = 
    ImmutableList.of("foo", "bar"); 
56

आप इसे आसानी से public static final बना सकते हैं, लेकिन यह सामग्री को बदलने से लोगों को नहीं रोकेगा।

सबसे अच्छा तरीका सुरक्षित रूप से प्रकाशित है "निरंतर" द्वारा:

  • एक unmodifiable सूची
  • में यह लपेटकर यह

पॉप्युलेट करने के लिए परिणामस्वरूप एक उदाहरण ब्लॉक का उपयोग एक में प्रारंभिक समाप्ति के साथ अंतिम अंतिम घोषणा:

public static final List<String> list = Collections.unmodifiableList(
    new ArrayList<String>() {{ 
     add("foo"); 
     add("bar"); 
     // etc 
    }}); 

या, सरल तत्वों के लिए समान है, लेकिन अलग शैली (है कि कोड की जरूरत नहीं है)

public static final List<String> list = 
    Collections.unmodifiableList(Arrays.asList("foo", "bar")); 
+0

मैं जावा 1.4 का उपयोग करता हूं ..... इसलिए पैरामीटरयुक्त संग्रह का उपयोग नहीं कर सकता – Raghu

+2

फिर टाइपिंग को हटाएं - यह अभी भी – Bohemian

+2

@Raghu काम करेगा बड़ा सौदा क्या है? बस '' भाग ड्रॉप करें! – adarshr

13

जावा 1.4 संगत तरीका:

public static final List STRINGS = Collections.unmodifiableList(
    Arrays.asList(new String[] {"foo", "bar"})); 

इस तरह की सूची, unmodifiable है इस तरह के add() तरीके के रूप में बुला, remove() या set()UnsupportedOperationException का कारण बन जाएगा।

कम प्राचीन जावा संस्करणों के लिए:

public static final List<String> STRINGS = Collections.unmodifiableList(
    Arrays.asList("foo", "bar")); 

और अंत में, जावा 9 आता है के साथ:

public static final List<String> STRINGS = List.of("foo", "bar");