1. 程式人生 > 其它 >UnsupportedOperationException的原因及解決方案

UnsupportedOperationException的原因及解決方案

探討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;