Java异常 java.lang.UnsupportedOperationException

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类结构
Arrays.asList() 方法返回的是内部类 ArrayList ,asList() 方法如图:
Arrays.asList() 方法
可以看到,Arrays 类中的内部类其实也是继承了抽象类 AbstractList 类,但是并没有重写 AbstractList 中的 remove() 方法,而 AbstractList 类中的 remove() 方法默认抛出异常 UnsupportedOperationException,不做任何操作,如图:
AbstractList 类中的 remove() 方法

2、再看一下 ArrayList 类

ArrayList 类结构如下图:
ArrayList 类结构
点到 remove() 方法可以看到,ArrayList 类是重写了父类AbstractList 类中的 remove() 方法的。如图:
ArrayList 类 remove() 方法

3、解决异常方法:

  1. 将 asList() 结果再次 new ArrayList(),转成 java.util.ArrayList 类对象;
    List selectUserIdList = Arrays.asList(userIds);
    List arrayList = new ArrayList(selectUserIdList);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值