UnsupportedOperationException的分析与解决方案
当你在操作List对象时,可能会遇到类似这样的异常。
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(Unknown Source)
at java.util.AbstractList$Itr.remove(Unknown Source)
at java.util.AbstractCollection.remove(Unknown Source)
在后来找问题中,我突然想到了以前的一段代码出现的问题。
那就是一个方法
public List<XXXX> getXXXX() {
return Arrays.asList(objectArray);
}
其中,objectArray是一个对象数组, 返回的是Object[].我为了方便,偶然的机
会我就使用了Arrays.asList()方法。结果没有编译异常。当我在运行的时候,
就抛出了不能转换的异常。大致是Object转换为XXXX对象转换异常。
其实,从异常信息可以看出问题的根本是Arrays.asList()方法返回的是一个
AbstractList对象,而并非是ArrayList对象。
异常的根本已经找到了。接下来就讲讲怎么解决这样的异常了。
我的方法是在方法体内定义一个临时List对象,用了ArrayList。
List l = new ArrayList();
当然了可以范型化
List<XXXX> l = new ArrayList<XXXX>();
然后,再用一个for循环来加入到这个l列表中,并最终返回这个列表。
完成代码:
public List<XXXX> getXXXX() {
List<SysRole> list = new ArrayList<SysRole>();
for(Object o : objectArray) {
SysRole user = (SysRole)o;
list.add(user);
}
return list;
}
这样就解决了这个异常了。
另外还有一篇英文的连接,大家可以看看。
http://www.theserverside.com/discussions/thread.tss?thread_id=38493