2011-08-29 12 views
12

मेरे पास एक कोड है जो कुछ पेज किए गए स्ट्रिंग डेटा से सूची पढ़ता है। मुझे क्या समझ में नहीं आता - क्यों असमर्थित ऑपरेशन अपवाद को addAll() पर फेंक दिया गया है और यह यादृच्छिक व्यवहार क्यों है?ArrayList.addAll (ArrayList) कुछ समय तक फेंकता है असमर्थितऑपरेशन अपवाद

मुझे पता है कि लक्ष्य ArrayList बनाना और लौटाए गए किसी को जोड़ने से समस्या हल हो जाती है, मैं बेहतर समझने की तलाश में नहीं हूं।

List<Event> eventList = eventTable.getEvents(); // returns ArrayList 
while (hasNextPage()) { 
    goToNextPage(); 
    eventList.addAll(eventTable.getEvents()); 
} 

उत्तर

18

List<Event> आवश्यक रूप से ArrayList<Event> नहीं है। , कारण आप UnsupportedOperationException कभी कभी मिलता है (ठीक विपरीत स्थिति यह है।)

क्योंकि eventTable.getEvents()कभी कभी एक सूची है कि addAll का समर्थन करता है देता है और कभी कभी यह नहीं है है।

getEvents के कार्यान्वयन उदाहरण के लिए ऐसा दिखाई दे सकता:

if (noEventsAvailable) { 
    return Collections.emptyList(); 
} else { 
    List<Event> toReturn = new ArrayList<Event>(); 
    // populate list... 
    return toReturn; 
} 

(अपनी टिप्पणी में आप // returns ArrayList बारे में मैं नहीं जानता कि तुम कहाँ से यह मिल गया है, लेकिन मुझे यकीन है कि के लिए एक बात पता है। : एक ArrayListहमेशाaddAll आपरेशन हल करने के लिए यह है, जैसा कि आप का उल्लेख है, सही तरीके का समर्थन करेंगे)

करने के लिए

+4

अक्सर यह एक सरणी है जो Arrays.asList() –

+0

Yup के साथ लपेटा गया था, यह सच है। :-) – aioobe

+2

आप सही हैं, मैं डिफ़ॉल्ट संग्रह .emptyList() चूक गया। यह कारण होना चाहिए। –

2

यह List के वास्तविक कार्यान्वयन पर निर्भर करता है।

उदाहरण के लिए यदि अंतर्निहित सूची Collections.unmodifiableList() का उपयोग करके प्राप्त की गई थी तो addAll() पर कॉल करना या कोई अन्य संशोधन विधि UnsupportedOperationException फेंक देगी।

0

जब यह अपवाद फेंकता है, तो आपको सटीक रेखा संख्या और स्रोत कोड फ़ाइल दिखाना चाहिए - आपको क्यों यह अपवाद फेंकने में सक्षम होना चाहिए।

मेरा अनुमान है कि कुछ परिस्थितियों में, eventTable.getEvents() एक अपरिवर्तनीय सूची, या ऐसा कुछ देता है - लेकिन यह जानने के बिना कि eventTable क्या है, यह सुनिश्चित करना मुश्किल है। यदि आप एक छोटा लेकिन पूरा कार्यक्रम तैयार कर सकते हैं जो समस्या का प्रदर्शन करता है, तो यह निदान करने के लिए बहुत आसान बना देगा।

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