UnsupportedOperationException的原因及解決方案
阿新 • • 發佈:2021-11-03
探討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;