2014-09-02 6 views
24

List.addAll एक और सूची जोड़ने की कोशिश करते समय UnsupportedOperationException फेंक रहा है।List.addAll एक और सूची जोड़ने की कोशिश करते समय असमर्थितऑपरेशन अपवाद फेंकना

List<String> supportedTypes = Arrays.asList("6500", "7600"}; 

और पाश में मैं कर रहा हूँ,

supportedTypes.addAll(Arrays.asList(supportTypes.split(","))); //line 2 

एक फ़ाइल से supportTypes पढ़ने।

लेकिन लाइन 2 UnsupportedOperationException फेंकता है, लेकिन मैं यह निर्धारित करने में सक्षम नहीं हूं क्यों?

मैं एक सूची में एक और सूची जोड़ रहा हूं, तो यह ऑपरेशन असमर्थित क्यों है?

उत्तर

47

Arrays.asList एक सरणी द्वारा समर्थित एक निश्चित आकार की सूची देता है, और आप इसमें तत्व नहीं जोड़ सकते हैं।

आप addAll काम करने के लिए एक परिवर्तनीय सूची बना सकते हैं:

List<String> supportedTypes = new ArrayList<String>(Arrays.asList("6500", "7600", "8700"));

+0

समर्थित टाइप्स एक सूची है और मैं इसमें जोड़ रहा हूं। – Batty

+0

@ बत्ती - और यही समस्या है। यह काम नहीं करता है। 'Aslist' के लिए जावाडोक यह स्पष्ट करता है कि यह काम नहीं करेगा। कहानी का अंत। आप 'asList' का उपयोग करके बनाई गई सूची में तत्व नहीं जोड़ सकते हैं। अवधि। –

+1

सूची एक इंटरफ़ेस है, वर्तमान कार्यान्वयन को इसके सभी तरीकों को लागू करना है, लेकिन यह कार्यान्वयन यह कहने के लिए अपवाद को फेंक सकता है कि "इस विधि का कोई अर्थ नहीं है" –

7

Arrays.asList एक निश्चित-आकार सूची देता है।

आप सूची में तत्वों को जोड़ने के लिए सक्षम हो चाहते हैं, तो कार्य करें:

List<String> supportedTypes = new ArrayList<>(Arrays.asList("6500", "7600"}); 
supportedTypes.addAll(Arrays.asList(supportTypes.split(","))); 
4

समस्या है कि Arrays.asList विधि रिटर्न java.util.Arrays.ArrayList का उदाहरण है, जिसमें जोड़ने का समर्थन नहीं करता/तत्वों पर कार्रवाई को दूर है। यह आश्चर्य की बात नहीं है कि addAll विधि अपवाद फेंकता है क्योंकि java.util.Arrays.ArrayList के लिए ऐड पद्धति के रूप में परिभाषित किया गया है:

public void add(int index, E element) { 
    throw new UnsupportedOperationException(); 
} 

संबंधित प्रश्न:

Arrays.asList() Confusing source code

documentation से:

Arrays.asList निर्दिष्ट सरणी द्वारा समर्थित एक निश्चित आकार की सूची देता है।

2

यह त्रुटि तब होता है जब सूची Collections.emptyList() साथ आरंभ नहीं हो जाता है, जो अपरिवर्तनीय है:

List<String> myList = Collections.emptyList(); 

इसके बजाय, एक अस्थायी सूची के साथ यह आरंभ कर देगा। उदाहरण के लिए

List<String> myList = new ArrayList<>(); 
संबंधित मुद्दे