![](/img/trans.png)
[英]what does it mean when java.util.Iterator.remove() method is 'optional operation'?
[英]What does “optional operation” mean in Javadoc of for example Set#add(E)?
在用於Set的java文檔中時,它在方法規范中說明Optional Operation
例如(由我強調)
添加(E e)
如果指定的元素尚不存在,則將其添加到此集合(可選操作) 。
可選的含義是什么?
如果我使用除SUN / Oracle之外的JVM,Java的實現可能不提供此操作?
Set
是一個界面。 實現該接口的類不一定需要為可選操作提供實現。
我認為這些可選操作可以追溯到通用的Collection
接口,其中操作是可選的,對某些類型的集合沒有意義。 例如, add
是一種對某種只讀集合不太有用的操作。 它在Javadoc中明確地拼寫出來,因此它成為所有集合類提供的一部分,但是使用它的人知道,鑒於某些集合他們並不確切知道,可能是該方法只是拋出UnsupportedOperationException
。
如果此集合不支持該操作,則指定此接口中包含的“破壞性”方法(即修改其操作集合的方法)將拋出UnsupportedOperationException。 如果是這種情況,如果調用對集合沒有影響,則這些方法可能(但不是必須)拋出UnsupportedOperationException。 例如,如果要添加的集合為空,則可以(但不是必須)在不可修改的集合上調用addAll(Collection)方法拋出異常。
請注意,那里描述的許多方法都不是可選的。
可以說,Java Collections Framework並不完美; 這可能是撫養其(微小)頭部的不完美之一。
在JavaDoc中將接口方法指定為可選的意味着實現此接口的類不一定必須實現該方法。 相反,他們可以例如拋出異常。
更具體地說,JavaDoc中的接口方法是可選的並不意味着它是特定於實現的行為。 該類的每個具體實現都將指定它是否實現它。 查看HashMap類,它包含add操作,並沒有將其指定為可選。 因此,Java庫的每個實現都必須為其HashMap
類包含此方法的實現。 TreeMap
等也是如此。
將此操作聲明為可選的原因可能是因為某些集合在概念上可能是不可變的,例如Collections.unmodifiableSet返回的集合。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.