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