java.lang.UnsupportedOperationException: null
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
前台页面报系统错误,看了日志报这个异常,想了想没搞懂为啥会报错???
1:场景
kylinStaffDataVoList = Collections.EMPTY_LIST;
...
List<TaskRankingStaffDataVo> zeroList = new ArrayList<>();
...
kylinStaffDataVoList.addAll(zeroList ); //日志报错位置
后来点进去看了看上面那个EMPTY_LIST常量,
@SuppressWarnings("rawtypes")
public static final List EMPTY_LIST = new EmptyList<>();
发现EmptyList虽然也继承了AbstractList类,但是并没有实现AbstractList的addAll()方法,再点进AbstractList的,看他的addAll()方法:
public boolean addAll(Collection<? extends E> c) {
return addAll(size, c);
}
连续进几层。。。
*/
public boolean addAll(int index, Collection<? extends E> c) {
rangeCheckForAdd(index);
boolean modified = false;
for (E e : c) {
add(index++, e);
modified = true;
}
return modified;
}
会发现先最终循环调用add()来添加,再进去:
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
他就会抛UnsupportedOperationException异常了!!!
可能解释的不准确,求各位大佬补充。。。
总之由于EMPTY_LIST(EmptyList),没有重写AbstractList的某些方法,导致使用的时候会直接使用父类的,而父类的会直接抛出异常。
2:解决方案
我就是直接新创建 一个new ArrayList,把他放进去,最后就OK了
ArrayList<TaskRankingStaffDataVo> list = new ArrayList<>(kylinStaffDataVoList);
list.addAll(zeroList);