UnsupportedOperationException异常馆藏
虽然研究Collection
API,我们发现一些方法(add
,remove
,...)可以抛出java.lang.UnsupportedOperationException
如果目前实施的征收不支持这些功能。UnsupportedOperationException异常馆藏
实际上,JDK中是否存在不支持这些方法的具体Collection
?
非常感谢您的回答。
明显的例子是从Collections.unmodifiableCollection()
和其他类似的方法返回的实现。会改变Collection
的方法会抛出此异常。
好的。这似乎是逻辑。谢谢。 那么JDK的当前(可修改)实现呢?我想所有的thoses类都不会抛出这个异常? – 2010-05-22 10:07:10
真棒例子! – ufdeveloper 2017-03-15 19:19:07
是的。例如,当您拨打Collections.unmodifiableList(list)
时,返回的列表不支持add(..)
但是,这些集合大多是不公开的API,因此您不能实例化它们。
感谢Bozho,对于这个答案也;-) – 2010-05-22 10:07:47
Collections.unmodifiable*
方法返回的集合
除此之外,还有一对夫妇更有趣的情况下UnsupportedOperationException
实际上是抛出:
- 一个
Map
收集意见,通过entrySet()
,keySet()
和values()
访问可以有删除但未添加的元素, - 由
Arrays.asList
返回的列表视图可以具有既不添加也不删除元素, - 此外,从
Collections.empty*
和Collections.singleton*
方法也被标记为“不可变”,所以 - 虽然没有在API文档中明确说明 - 我想这些抛出异常以及尝试修改它们。
通常当您创建一个像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;
对于动态列表操作,你应该有一个像
List<String> sample= new ArrayList<String>();
语法。在这份名单中,你可以执行sample.add(), sample.addAll()
等等
可能会有所帮助:http://www.google.com/codesearch?hl=en&q=%22throw+new+UnsupportedOperationException%22+package:%22http ://hg.openjdk.java.net/jdk7/l10n/jdk%22&filter=0p&sa=N&cd=7&ct=rm – 2010-05-22 09:46:32