java.lang.UnsupportedOperationException异常

提示错误:

java.lang.UnsupportedOperationException
 at java.util.AbstractList.add(AbstractList.java:148)
 at java.util.AbstractList.add(AbstractList.java:108)
 at com.sunesoft.lemon.syms.eHr.application.AttendanceRuleSetServiceImpl.addOrUpdateOrDelRuleDate(AttendanceRuleSetServiceImpl.java:82)
 at com.sunesoft.lemon.syms.eHr.application.AttendanceRuleSetServiceImpl$$FastClassBySpringCGLIB$$c8bfaf5e.invoke(<generated>)

......

今天遇到的,发现自己遇到的问题并且解决,是一件很快乐的事情,

问题所在:在此之前,我用了,List<RuleDate> list=Collections.emptyList();

这里需要讨论:Arrays$ArrayList与ArrayList

在网上查一下原因是因为部分集合类型一样但是缺少部分方法或不支持。

如特殊情况如下:

(1)常常使用Arrays.asLisvt()后调用add,remove这些method时出现java.lang.UnsupportedOperationException异常。这是由于:

Arrays.asLisvt() 返回java.util.Arrays$ArrayList, 而不是ArrayList。Arrays$ArrayList和ArrayList都是继承AbstractList,remove,add等method在AbstractList中是默认throw UnsupportedOperationException而且不作任何操作。ArrayList override这些method来对list进行操作,但是Arrays$ArrayList没有override remove(int),add(int)等,所以throw UnsupportedOperationException。

也就是说Collection.emptyList()里没有add(),remove等方法的override;

解决方法:List<RuleDate> list=new ArrayList();

 

posted @ 2016-07-04 15:16  海南岛岛  阅读(542)  评论(0编辑  收藏  举报