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(…)创建的列表中删除元素时,出现了异常