Bootstrap

Collections.empty***()的误用

List idsList = new LinkedList();
idsList.add(123546L);

List idList = Collections.emptyList();
idList.addAll(idsList); - 此操作异常:java.lang.UnsupportedOperationException

当调用集合的addAll()方法时,无论调用者还是被调用者的集合
是以Collections.empty***()此种方式创建的话,都会出现以上异常。

这是为什么呢?
查看源码我们会发现,emptyList()方法返回的不是ArrayList对象,而是java.util.Collections.EmptyList对象,此对象继承了AbstractList,但并没有重写add()方法,addAll()最终调用的add(),AbstractList里的add()就是返回UnsupportedOperationException。

同理,emptySet()、emptyMap()都是这样不能操作的;
以此类推,此类方法创建的空集合也不能进行添加操作add()、put()。

;