"可选操作"在Javadoc中的含义是什么,例如Set#add(E)?

Cra*_*lus 14 java javadoc set

在用于Set的java文档中时,它在方法的规范中说,Optional Operation例如(由我强调)

add(E e)
如果指定的元素尚不存在,则将其添加到此集合中(可选操作).

可选的含义是什么?

如果我使用除SUN/Oracle之外的JVM,Java的实现可能不提供此操作?

Joe*_*oey 9

Set是一个界面.实现该接口的类不一定需要为可选操作提供实现.

我认为这些可选操作可以追溯到通用Collection界面,其中操作是可选的,对某些类型的集合没有意义.例如add,对某种只读集合并不真正有用的操作.它在Javadoc中明确地拼写出来,因此它成为所有集合类提供的一部分,但是使用它的人知道,鉴于某些集合他们并不确切知道,可能是该方法只是抛出一个UnsupportedOperationException.

  • @ user384706,如果你有一个`ImmutableSet`,那么对于不存在的操作是否有意义.并非每个集合都是可变的(有些可能只是推迟到某些其他数据源,例如,可能无法修改). (2认同)
  • @AlexR,他们*可能但不需要*抛出异常。这是有区别的。(请参阅下面 Matt 的回答,其中引用了 Javadoc 中的相关部分) (2认同)

Mat*_*ick 5

来自java.util.Collections文档:

该接口中包含的“破坏性”方法(即修改其操作的集合的方法)被指定为在该集合不支持该操作时抛出 UnsupportedOperationException。在这种情况下,如果调用对集合没有影响,这些方法可能(但不是必须)抛出 UnsupportedOperationException。例如,如果要添加的集合为空,则在不可修改的集合上调用 addAll(Collection) 方法可能(但不是必须)引发异常。

请注意,其中描述的许多方法都不是可选的。

可以说,Java 集合框架并不完美。这可能是突出其(微小)头的缺陷之一。