Java异常 java.lang.UnsupportedOperationException
java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractCollection.remove(AbstractCollection.java:293)
产生异常的代码块:
List<String> selectUserIdList = Arrays.asList(userIds);
// 获取该角色下的用户集合
List<SysUserRoleEntity> roleUserList = userRoleMapper.getUsersByRoleId(null, roleId, null);
// 移除掉userIds中已经存在该角色下用户id
if(! roleUserList.isEmpty()) {
for (SysUserRoleEntity item : roleUserList) {
selectUserIdList.remove(item.getUserId());
}
}
这里主要涉及到 java.util.Arrays 类中的内部类 ArrayList 类和 java.util.ArrayList 类的区别。
1、首先看一下 Arrays 类
Arrays 类结构如下:
Arrays.asList() 方法返回的是内部类 ArrayList ,asList() 方法如图:
可以看到,Arrays 类中的内部类其实也是继承了抽象类 AbstractList 类,但是并没有重写 AbstractList 中的 remove() 方法,而 AbstractList 类中的 remove() 方法默认抛出异常 UnsupportedOperationException,不做任何操作,如图:
2、再看一下 ArrayList 类
ArrayList 类结构如下图:
点到 remove() 方法可以看到,ArrayList 类是重写了父类AbstractList 类中的 remove() 方法的。如图:
3、解决异常方法:
- 将 asList() 结果再次 new ArrayList(),转成 java.util.ArrayList 类对象;
List selectUserIdList = Arrays.asList(userIds);
List arrayList = new ArrayList(selectUserIdList);