使用asList方法操作集合造成UnsupportedOperationException()异常

背景:

使用asList方法将一个枚举类数组转为list集合,然后进行add/remove/clear方法操作集合会UnsupportedOperationException()。


问题描述

枚举类如下

public enum EquipType {

    SECURE_INTERACTION_PLATFORM("xx平台"),

    STORAGE("xx设备"),

    FIREWALL( "xx墙"),

    DNS("xx设备"),

    ISOLATION_DEVICE("xx装置"),

    NETWORK_EQUIPMENT("xx设备"),

    PHYSICAL_MACHINE("xx机");


    private String value;

    EquipType() {
    }

    EquipType(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

	/**
		找到匹配的枚举
	**/
    public static EquipType getVal(String val){
        if (StringUtils.isBlank(val)){
            return null;
        }

        for (EquipType equipType : EquipType.values()) {
            if (val.equals(equipType.getValue())){
                return equipType;
            }
        }
        return null;
    }
    /**
    排除传入的value集合
    **/
    public static List<EquipType> getOtherVal(List<String> rmList){
        List<EquipType> typeList = new ArrayList<>(Arrays.asList(EquipType.values()));
        rmList.forEach(s -> typeList.remove(getVal(s)));
        return typeList;
    }

}

在项目中实际调用枚举方法去除传入的枚举值时,在这里使用了remove操作,所以造成异常
在这里插入图片描述

然后小写一个测试类,来看看具体情况
在这里插入图片描述

直接使用aslist的话,就很明显了,idea就会提示可能会造成UnsupportedOperationException异常。
我真不信,直接实战一哈。
然后果不其然的报错
在这里插入图片描述

解决

其实解决方法也简单,直接再给他套一层list就行。
在这里插入图片描述

原因分析:

我们直接点进aslist的源码康康
在这里插入图片描述
第一层没啥问题,再进去康康
在这里插入图片描述
方法返回的List对象不是常见的ArrayList,而是Arrays的一个内部类,看来其实aslist之后本质返回的是个数组,而且这个内部类没有add,clear,remove方法,抛出的异常也是来自于父类的AbstractList

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值