UnsupportedOperationException的分析與解決方案

 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章