执行代码:
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.remove、Set.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
也就是说,由Map.keySet()返回的集合,仅支持删除元素,并不支持再在其中插入元素。