天天看點

java集合報錯:java.lang.UnsupportedOperationException

今天開發時遇到了這樣一個異常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");