实际项目中针对于数组转List操作中报java.lang.UnsupportedOperationException错误分析以及解决方案
Test错误案例,代码比较简洁,如下图
public class TestDemo {
public static void main(String[] args) {
String [] str = {"1","2"};
List<String> list = Arrays.asList(str);
list.add("3");
}
}
数据str转List,List操作add、addAll、remove方法都会报java.lang.UnsupportedOperationException,为什么都会报相同的错呢,主要是因为内部类ArrayList并没有对相应方法进行重写操作,我们一步一步看源码来分析一下,首先我们进asList方法中,发现源码做的是调用内部类ArrayList的操作,如下图
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, Serializable内部类也是继承了AbstractList,下面可以看一下AbstractList的源码如何写的
同样由于addAll是调用的add方法所以同样也会报相同的错误
解决方案
public class TestDemo {
public static void main(String[] args) {
String [] str = {"1","2"};
List<String> list = Arrays.asList(str);
//aa.add("3");
List<String> arryList = new ArrayList(list);
arryList.add("3");
}
}