调用Set.addAll()方法时抛UnsupportedOperationException异常

7 篇文章 0 订阅

执行代码:

Set<String>couponIdSet=couponInfoToCacheService.getCouponIdAll();
if(catIdSet!=null&&catIdSet.size()>0){
Set<String>couponIdCatSet=couponInfoToCacheService.getCouponIdByCatId(catIdSet);
if(couponIdCatSet.size()>0){
couponIdSet.addAll(couponIdCatSet);
}
}

报错如下:
这里写图片描述

原本认为是couponIdCatSet为空的原因,后来加了一个空判断,仍旧报UnsupportedOperationException异常。

好神奇的异常啊。。。
couponIdSet是getCouponIdAll返回的Map.KeySet()集合
而Set是支持addAll()方法的。

百度了一下,发现不是AddAll方法的问题,而是Map的KeySet()方法返回的Set集合不允许增加操作。(这个坑啊!!)

下面是摘自API帮助文档的说明
keySet 
public Set keySet()返回此映射中所包含的键的 set 视图。该集合受映射的支持,所以映射的变化也反映在该集合中,反之亦然。该集合支持元素的移除,通过 Iterator.removeSet.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。 

也就是说,由Map.keySet()返回的集合,仅支持删除元素,并不支持再在其中插入元素。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值