java.lang.UnsupportedOperationException異常分析和解決方法

前言:做開發一定要注意細節,要學會看底層代碼分析一些異常。
在開發過程對List進行操作時報錯java.lang.UnsupportedOperationException,仔細查看代碼,初步發現該List是由數組轉換而成,通過源碼找到問題根源。
示例代碼:

 List<String> strArrays = Arrays.asList(str);
 strArrays.remove(appMarkId);

執行結果:

java.lang.UnsupportedOperationException
	at java.util.AbstractList.remove(AbstractList.java:161)
	at java.util.AbstractList$Itr.remove(AbstractList.java:374)
	at java.util.AbstractCollection.remove(AbstractCollection.java:293)
	at com.yazoneast.qdp.feature.statistic.client.handler.DynamicDataSourceRestHandler.removeDataSource(DynamicDataSourceRestHandler.java:141)

發生問題原因:
調用Arrays.asList()生產的List的add和remove方法出現異常,這是因爲Arrays.asList()返回的是Arrays的內部類ArrayList而不是java.util.ArrayList。Arrays的內部類ArrayList都是繼承了AbstractList,AbstractList中的add、set、remove方法都默認throw new UnsupportedOperationException()。
源碼:
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述
解決方法:

 List<String> arrList = new ArrayList<>(strArrays);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章