2009-07-21 8 views
9

मैं सिर्फ यह जानना चाहता हूं कि java.util.Collections.checkedList() वास्तव में उपयोग किया जाता है।जावा में संग्रह .checkedList() कॉल क्या है?

मेरे पास कुछ कोड है जो मुझे पता है कि मुझे List<String> लौटा रहा है लेकिन इसे मैसेजिंग कॉल की एक श्रृंखला के माध्यम से पारित किया जा रहा है और मुझे java.io.Serializable के रूप में वापस लौटा दिया गया है। क्या यह चेकलिस्ट कॉल मेरे Serializable को List<String> में बदलने के लिए अच्छा है? मुझे पता है कि मैं इसे java.util.List पर डाल सकता हूं, लेकिन मुझे प्रत्येक तत्व की जांच नहीं करनी पड़ेगी और मुझे लगता है कि प्रत्येक तत्व String है।

उत्तर

16

यह किसी डीबगिंग टूल के रूप में उपयोग किया जाता है यह पता लगाने के लिए कि कोड गलत प्रकार की कक्षा को कैसे सम्मिलित करता है, यदि आप ऐसा देखते हैं, लेकिन यह पता नहीं लगा सकता है।

आप इसे सार्वजनिक एपीआई के हिस्से के रूप में उपयोग कर सकते हैं जो एक संग्रह प्रदान करता है और आप यह सुनिश्चित करना चाहते हैं कि संग्रह गलत प्रकार के कुछ भी नहीं मिलता है (उदाहरण के लिए क्लाइंट जेनेरिक को मिटा देता है)।

जिस तरह से आप अपने मामले में इसका इस्तेमाल कर सकते है:

Collections.checkedList(
     new ArrayList<String>(uncertainList.size()), String.class) 
     .addAll(uncertainList); 

अगर वह एक अपवाद फेंक नहीं है, तो आप जानते हैं कि आप अच्छा कर रहे हैं। यह वास्तव में कोड का एक अनुकूलित अनुकूलित टुकड़ा नहीं है, लेकिन यदि सूची सामग्री काफी कम है, तो यह ठीक होना चाहिए।

+0

अच्छा वैकल्पिक हल! –

14

नहीं काफी:

Collections.checkedList केवल गलत वर्ग की वस्तुओं के साथ भविष्य के किसी भी आवेषण को रोकने के लिए सूची को सजाने जाएगा, यह सभी तत्वों को सूची में पहले से ही जांच नहीं करेगा।

हालांकि, आप एक नई चेकलिस्ट बना सकते हैं, और फिर addAll पर कॉल करें और उस सूची में पास करें जिसमें आप लूप लिखने के बजाय अनिश्चित हैं।

9

checkedCollection के लिए प्रलेखन में उपलब्ध checkedList के बारे में एक चर्चा का उपयोग किया जा सकता है। दिए गए कारण हैं:

    एक डिबगिंग सहायता के रूप में
  • (यदि किसी को एक अनियंत्रित डाली इस्तेमाल किया गया है)
  • सुरक्षा सुनिश्चित करने के लिए जब एक संग्रह गुजर तीसरे पक्ष के कोड की आबादी किया जाना है।

आप निम्न google collections से जाँच करने के लिए है कि इस सूची में केवल स्ट्रिंग से युक्त होता है इस्तेमाल कर सकते हैं:

Iterables.all(list, Predicates.instanceOf(String.class)) 
+0

धन्यवाद। मैंने यह खो दिया। आईडीई मेरे जावाडोक पढ़ने को खराब कर रहे हैं। –

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