java.lang.UnsupportedOperationException解決方法

今天做項目的時候遇到一個報錯java.lang.UnsupportedOperationException,沒看控制檯報錯的時候以爲是空指針報錯。可是經過debug發現棧中變量都沒發現啥問題,其中報錯的代碼爲

List<String> supEmailList = Arrays.asList(supEmails);
if (StringUtils.isNotBlank(user.getMail())) {
            supEmailList.add(user.getMail());
}

剛開始我一直沒看出有啥問題,但是也確實對supEmailList 這個變量的add方法是否能這樣使用存在懷疑,於是我查詢了一下資料證實了我的想法:調用Arrays.asList()生產的List的add、remove方法時報異常,這是因爲Arrays.asList() 返回的是Arrays的內部類ArrayList, 而不是java.util.ArrayList。Arrays的內部類ArrayList和java.util.ArrayList都是繼承AbstractList,remove、add等方法AbstractList中是默認throw UnsupportedOperationException而且不作任何操作。java.util.ArrayList重寫了這些方法而Arrays的內部類ArrayList沒有重寫,所以會拋出異常。解決方法如下:

List<String> tempList = Arrays.asList(supEmails);
        List<String> supEmailList = new ArrayList<>(tempList);
        if (StringUtils.isNotBlank(user.getMail())) {
            supEmailList.add(user.getMail());
        }

 

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