探討UnsupportedOperationException的原因及解決方案
Arrays.asList()方法返回的是不可變集合
做開發一定要注重細節。
在項目中對List進行操作時報錯java.lang.UnsupportedOperationException,后來發現操作的List是由數組轉換而成的,通過看源碼發現問題,並寫測試程序如下。
執行結果:
**發生問題的原因如下: **
調用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> str=new ArrayList<>();
Arrays.stream(array).forEach(arr->str.add(arr));
return str;