Java 集合上的UnsupportedOperationException

Java 集合上的UnsupportedOperationException,java,exception,collections,Java,Exception,Collections,在研究集合API时,我们发现如果集合的当前实现不支持这些功能,某些方法(add,remove,…)可能抛出java.lang.UnsupportedOperationException 实际上,JDK中是否有一个具体的集合不支持这些方法 非常感谢您的回答。显而易见的例子是从集合.unmodifiableCollection()和其他类似方法返回的实现。更改集合的方法将抛出此异常。是。例如,当您调用Collections.unmodifiableList(list)时,返回的列表不支持add(…)

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

实际上,JDK中是否有一个具体的
集合
不支持这些方法


非常感谢您的回答。

显而易见的例子是从集合.unmodifiableCollection()
和其他类似方法返回的实现。更改
集合的方法将抛出此异常。

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


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

除了方法返回的集合外,还有几个有趣的情况,其中实际抛出了
UnsupportedOperationException

  • 的集合视图,通过访问,可以删除但不添加元素
  • 返回的列表视图不能添加或删除元素
  • 此外,从
    Collections.empty*
    Collections.singleton*
    方法获得的对象也被标记为“不可变”,因此-尽管API文档中没有明确说明-我认为这些方法在试图修改它们时也会引发异常

通常当您创建一个类似于
list 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;
    
    List ls=new ArrayList();
    ls.添加(“一”);
    ls.添加(“三”);
    ls.添加(“两”);
    ls.添加(“四”);
    样本=ls;
    
  • 对于动态列表操作,应该使用如下语法
    List sample=new ArrayList()。在此列表中,您可以执行
    sample.add()、sample.addAll()
    等操作


可能有帮助:好的。这似乎合乎逻辑。谢谢那么JDK当前的(可修改的)实现又如何呢?我想所有这些类都不会抛出这个异常?谢谢Bozho,也谢谢你的回答;-)当我试图从通过Arrays.asList(…)创建的列表中删除元素时,出现了异常