2011-07-21 7 views
8

मैंने अभी देखा है कि ImmutableList.of(E[])ImmutableList.copyOf() के पक्ष में बहिष्कृत है, स्पष्ट कारण के लिए कि यदि कच्चे सरणी का उपयोग कहीं और किया जाता है तो सूची को वास्तव में अपरिवर्तनीय नहीं बनाया जा सकता है।अमरूद: ImmutableList.of के साथ सर्वोत्तम प्रथाओं (ई [])

क्या होगा यदि आपके पास कोई तरीका है जो एक सरणी देता है, और आप इस तथ्य के बारे में जानते हैं कि विधि सरणी के संदर्भ पर नहीं है, और आपका कोड अन्य के अलावा सरणी के संदर्भ में नहीं है इसे ImmutableList.of() पर पास कर रहा है?

मैं ...

  • ImmutableList.of(E[]) उपयोग करने के लिए जारी रखना चाहिए
  • उपयोग Collections.unmodifiableList(Arrays.asList())
  • उपयोग ImmutableList.copyOf() (एक बुरा विचार के बाद से विधि दूर जाना होगा की तरह लगता है) - यह सबसे अच्छा विचार की तरह लगता जहां प्रदर्शन/संसाधन मुद्दे उत्पन्न नहीं होते हैं, अन्यथा प्रतिलिपि अनावश्यक है।

उत्तर

16

ImmutableList.of(E[]) नहीं है और सरणी यह ​​सीधे (यह अपरिवर्तनीय अगर यह, किया था कि किस वर्ग के बिंदु को हराने होगा नहीं होगा) दिया है संग्रहीत नहीं किया है। नामकरण के कारण इसे हटा दिया गया था। आप कार्यान्वयन पर एक नज़र डालें, तो यह है:

public static <E> ImmutableList<E> of(E[] elements) { 
    return copyOf(elements); 
} 

तो मेरी सलाह सिर्फ सामान्य रूप में ImmutableList.copyOf() उपयोग करने के लिए किया जाएगा। यदि आप जानते हैं कि आप केवल आंतरिक उपयोग के लिए एक सरणी लपेट रहे हैं या कुछ ऐसे हैं, तो प्रतिलिपि स्वयं को बचाने के लिए स्वतंत्र महसूस करें और केवल Arrays.asList का उपयोग करें, लेकिन मैं एपीआई के लिए ImmutableList पसंद करूंगा।

संबंधित मुद्दे