java.lang.UnsupportedOperationException
🏷️ Java 9
在使用 Arrays.asList
方法将数组转为 List 后,再执行 List 的 addAll
方法时出现 "java.lang.UnsupportedOperationException" 异常。
java.lang.UnsupportedOperationException 虽然给出了解决方案,但是原因仍然不理解。
为了防止这个异常的发生,可以利用 List 接口的实例对象中的构造方法重新构造一次对象即可,上面程序改成:
List<Integer> list = new ArrayList<Integer>(Arrays.asList(1, 2));
2024-1-18 追记
Arrays.asList
方法的备注上其实已经做了说明:
Returns a fixed-size list backed by the specified array. Changes made to the array will be visible in the returned list, and changes made to the list will be visible in the array. The returned list is Serializable and implements RandomAccess.
The returned list implements the optional Collection methods, except those that would change the size of the returned list. Those methods leave the list unchanged and throw UnsupportedOperationException.
翻译过来就是:
返回一个由指定数组支持的固定大小的列表。对数组做出的更改将在返回的列表中可见,对列表做出的更改将在数组中可见。返回的列表是可序列化的并实现了
RandomAccess
接口。返回的列表实现了可选的
Collection
方法,除了那些会改变返回列表大小的方法。这些方法会保持列表不变并抛出UnsupportedOperationException
异常。
Arrays.asList
返回的列表其实际类型是 java.util.Arrays.ArrayList
,而不是 java.util.ArrayList
。虽然都是基于数组保存数据的,但是 java.util.ArrayList
会在容量不够时自动扩容,而 java.util.Arrays.ArrayList
则不支持这些会改变列表容量的处理。