2010-05-22 60 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()等等

相關問題