Collection上的UnsupportedOperationException

Duk*_*dor 28 java collections exception

在研究CollectionAPI时,我们发现如果Collection的当前实现不支持这些功能,某些方法(add,remove...)可能会抛出java.lang.UnsupportedOperationException.

实际上,JDK中是否存在Collection不支持这些方法的具体内容?

非常感谢你的回答.

Pét*_*rök 28

除了Collections.unmodifiable*方法返回的集合之外,还有一些有趣的案例UnsupportedOperationException实际上被抛出:

  • 收集的意见的Map,通过访问entrySet(),keySet()并且values()可以具有元件移除,但不添加,
  • 返回的列表视图Arrays.asList可以包含既未添加也未删除的元素,
  • 此外,从Collections.empty*Collections.singleton*方法获得的对象也被标记为"不可变",所以 - 虽然它没有在API文档中明确说明 - 我想这些也试图修改它们时抛出异常.


Sea*_*wen 21

显而易见的例子是从例如Collections.unmodifiableCollection()和其他类似方法返回的实现.可以改变Collection抛出此异常的方法.


Rut*_*war 14

通常在创建列表时List<String> sample=Collections.emptyList();.列表sample将创建为Collections.unmodifiableCollection().

  • 因此列表示例不支持动态列表操作.您只能使用赋值运算符将另一个列表分配给此列表.例如>

    List<String> ls=new ArrayList<String>();
    ls.add("one");
    ls.add("Three");
    ls.add("two");
    ls.add("four"); 
    sample = ls;
    
    Run Code Online (Sandbox Code Playgroud)
  • 对于动态列表操作,您应该具有类似的语法 List<String> sample= new ArrayList<String>();.在此列表中,您可以执行sample.add(), sample.addAll()等...