问题描述
在操作数组转换成List的时候,对其进行元素的添加或者删除的时候报错。
复现
private void testArrayCastToListError() {
String[] strArray = new String[3];
List list = Arrays.asList(strArray);
//对转换后的list插入一条数据
list.add("a");
System.out.println(list);
}
异常堆栈信息
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
at com.darwin.junit.Calculator.testArrayCastToList(Calculator.java:19)
at com.darwin.junit.Calculator.main(Calculator.java:44)
原因分析
Arrays.asList(strArray)产生的list只可以对其进行查询和修改,如果对其进行删除或者新增,则就会抛出异常。
Arrays.asList(strArray)返回值是java.util.Arrays类中一个私有静态内部类java.util.Arrays.ArrayList具有 set(),get()等方法,不具有添加add()或remove()方法,所以新增或者删除会报错。
本文探讨了在Java中将数组转换为List后,尝试添加或删除元素导致的UnsupportedOperationException问题。通过复现代码展示了问题所在,即Arrays.asList()返回的列表不支持修改。原因分析指出,该列表是一个不可变的ArrayList实现,不提供添加或删除方法。解决方案通常涉及使用ArrayList的构造函数直接初始化List。
568

被折叠的 条评论
为什么被折叠?



