雖然研究Collection
API,我們發現一些方法(add
,remove
,...)可以拋出java.lang.UnsupportedOperationException
如果目前實施的徵收不支持這些功能。UnsupportedOperationException異常館藏
實際上,JDK中是否存在不支持這些方法的具體Collection
?
非常感謝您的回答。
雖然研究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