例如 Set#add(E) 的 Javadoc 中的“可选操作”是什么意思?

2022-09-02 21:46:42

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

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

这里的可选选项是什么意思?

如果我使用 SUN/Oracle 以外的 JVM,那么 Java 的实现可能无法提供此操作?


答案 1

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

我认为这些可选操作可以追溯到常规接口,其中操作是可选的,这对于某些类型的集合没有意义。例如: 是一种对某种只读集合没有实际用处的操作。它在Javadoc中明确拼写出来,因此它成为所有集合类提供的一部分,但是使用它的人知道,鉴于某些集合他们并不确切知道,该方法可能只是抛出一个.CollectionaddUnsupportedOperationException


答案 2

来自 java.util.Collections 文档:

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

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

Java Collections Framework可以说并不完美。这可能是养育其(微小)头部的缺陷之一。


推荐