2010-11-22 17 views
9

हर बार जब मैं java.util पर .remove() विधि का उपयोग करता हूं। मुझे त्रुटि मिलती है UnsupportedOperationException। यह मुझे पागल बना देता है। ArrayList को कास्ट करने में मदद नहीं करता है। उसको कैसे करे ?java.util.List से तत्व को कैसे निकालें?

@Entity 
@Table(name = "products") 
public class Product extends AbstractEntity { 

    private List<Image> images; 

    public void removeImage(int index) { 
     if(images != null) { 
      images.remove(index); 
     } 
    } 
} 

स्टैकट्रेस: ​​

java.lang.UnsupportedOperationException 
java.util.AbstractList.remove(AbstractList.java:144) 
model.entities.Product.removeImage(Product.java:218) 
    ... 

मुझे लगता है कि मैं सूची इंटरफेस की तुलना में अधिक सटीक वर्ग उपयोग करने की आवश्यकता है, लेकिन everywehere ORM उदाहरण में सूची प्रयोग किया जाता है ...

+0

जो सूची कार्यान्वयन आप उपयोग कर रहे हैं, स्टैक ट्रेस को यह स्पष्ट करना चाहिए। –

+0

ऐसा लगता है कि आप कुछ ओआरएम का उपयोग कर रहे हैं। ऐसा करने के लिए सही तरीका निर्धारित करने के लिए आप अपने दस्तावेज़ों से परामर्श लेना चाह सकते हैं। –

+0

सुनिश्चित करें कि आपकी सूची में प्रवेश है? निकालें() जाने का सही तरीका होना चाहिए। कृपया अपना पूरा स्टैकट्रैक पोस्ट करें, शायद इसमें कुछ और जानकारी है। – oezi

उत्तर

23

दुर्भाग्यवश, सभी सूचियां आपको तत्वों को हटाने की अनुमति नहीं देती हैं। List.remove(int index) के प्रलेखन से:

इस सूची (वैकल्पिक आपरेशन) में निर्दिष्ट स्थान पर तत्व निकाल देता है।

मूल सूची के समान तत्वों के साथ एक नई सूची बनाने के अलावा, और इस नई सूची के तत्वों को हटाने के अलावा आप इसके बारे में इतना कुछ नहीं कर सकते हैं। इस तरह:

public void removeImage(int index) { 
    if(images != null) { 
     try { 
      images.remove(index); 
     } catch (UnsupportedOperationException uoe) { 
      images = new ArrayList<Image>(images); 
      images.remove(index); 
     } 
    } 
} 
+5

अच्छा जवाब (+1), लेकिन मैं "दुर्भाग्य से" शब्द चुनौती दूंगा। मुझे लगता है कि यह एक विशेषता है कि कुछ सूचियां अपरिवर्तनीय हैं। आसपास के काम के लिए –

+0

+1। – JeremyP

+0

धन्यवाद। यह मेरे लिए काम करता है :) – marioosh

7

इसका सीधा सा अर्थ है अंतर्निहित List कार्यान्वयन हटाने के संचालन का समर्थन नहीं कर रहा है।

नोट: ListArrayList होना आवश्यक नहीं है। यह कोई कार्यान्वयन और कभी-कभी कस्टम हो सकता है।

2

सरणी सूची के लिए अपनी सूची कास्टिंग एक बात परिवर्तन नहीं होगा, वस्तु अपने आप में एक सूची रहता है और इसलिए आप केवल सूची गुण

क्या आप की कोशिश करनी चाहिए उसे बनाने के लिए उपयोग कर सकते हैं नए ArrayList

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