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

执行代码:

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

报错如下:
调用Set.addAll()方法时抛UnsupportedOperationException异常_第1张图片

原本认为是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()返回的集合,仅支持删除元素,并不支持再在其中插入元素。

你可能感兴趣的:(java,记录)