Collection上的UnsupportedOperationException

时间:2010-05-22 09:38:40

标签: java exception collections

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

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

非常感谢您的回答。

4 个答案:

答案 0 :(得分:28)

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

  • 通过MapentrySet()keySet()访问的values()的集合视图可以移除但未添加元素,
  • Arrays.asList返回的列表视图可以包含既未添加也未删除的元素
  • 此外,从Collections.empty*Collections.singleton*方法获得的对象也标记为“immutable”,因此 - 尽管未在API文档中明确说明 - 我想这些也会在尝试修改它们时引发异常。

答案 1 :(得分:19)

明显的例子是从Collections.unmodifiableCollection()和其他类似方法返回的实现。将更改Collection的方法抛出此异常。

答案 2 :(得分:14)

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

  • 因此列表示例不支持动态列表操作。您只能使用赋值运算符将另一个列表分配给此列表。 EG&GT;

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

答案 3 :(得分:4)

是。例如,当您致电Collections.unmodifiableList(list)时,返回的列表不支持add(..)

但是,这些集合大多是私有类,不会公开API,因此您无法实例化它们。