今天開發時遇到了這樣一個異常java.lang.UnsupportedOperationException
引起異常代碼:
URL url=urls.get(i);
parametersMap.putAll(url.getParameters());
parametersMap.put(Config.IP_KEY, url.getIp());
map.put(url.getParameter(Constants.APPLICATION_KEY),parametersMap);
就錯誤資訊來看是 parametersMap.put(Config.IP_KEY, url.getIp()); 這一行報錯,我們知道java.util.HashMap的putall(Map)方法會用參數中的map完全覆寫調用這個方法的map,然後發現url.getParameters()這個方法傳回的是collections内部類Map,這個Map類put()的實作隻是簡單地抛出java.lang.UnsupportedOperationException錯誤資訊。
嘗試解決:(HashMap)url.getParameters(),失敗:不能強制轉換
是以寫了一個方法,把其中的元素全部取出來放到一個HashMap中: parametersMap.putAll(transport(url.getParameters()));
類似的list的日常開發中也會有這樣的錯誤,從網上看到一段不錯:
位址:http://blog.163.com/[email protected]/blog/static/1695509052010720102614874/
異常代碼:
1.String[] strs = new String[]{"a","b"};
2. List<String> strList = Arrays.asList(strs);
3. strList.add("c");
在第三行抛出的異常
經分析java源代碼Arrys.asList();方法傳回的不是平常熟悉的java.util.ArrayList類的對象。而是Arrays類的内部類的對象,而Arrays類裡的内部類ArrayList沒有實作AbstractList類的add方法,導緻抛此異常! strList.add("c");這行代碼調用的add方法實際上是這樣的:
public boolean add(E e) {
add(size(), e);
return true;
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
解決方法:
String[] strs = new String[]{"a","b"};
List<String> strList = new ArrayList<String>(Arrays.asList(strs));
strList.add("c");