2010-05-22 51 views
20

虽然研究Collection API,我们发现一些方法(addremove,...)可以抛出java.lang.UnsupportedOperationException如果目前实施的征收不支持这些功能。UnsupportedOperationException异常馆藏

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

非常感谢您的回答。

+0

可能会有所帮助: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

回答

17

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

+0

好的。这似乎是逻辑。谢谢。 那么JDK的当前(可修改)实现呢?我想所有的thoses类都不会抛出这个异常? – 2010-05-22 10:07:10

+0

真棒例子! – ufdeveloper 2017-03-15 19:19:07

4

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

但是,这些集合大多是不公开的API,因此您不能实例化它们。

+0

感谢Bozho,对于这个答案也;-) – 2010-05-22 10:07:47

22
从由 Collections.unmodifiable*方法返回的集合

除此之外,还有一对夫妇更有趣的情况下UnsupportedOperationException实际上是抛出:

  • 一个Map收集意见,通过entrySet()keySet()values()访问可以有删除但未添加的元素,
  • Arrays.asList返回的列表视图可以具有既不添加也不删除元素,
  • 此外,从Collections.empty*Collections.singleton*方法也被标记为“不可变”,所以 - 虽然没有在API文档中明确说明 - 我想这些抛出异常以及尝试修改它们。
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; 
    
  • 对于动态列表操作,你应该有一个像 List<String> sample= new ArrayList<String>();语法。在这份名单中,你可以执行sample.add(), sample.addAll()等等

相关问题