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

时间:2011-12-04 13:33:10

标签: java set javadoc

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

  

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

这里的可选含义是什么?

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

3 个答案:

答案 0 :(得分:7)

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

我认为这些可选操作会返回到通用Collection接口,其中操作是可选的,对于某些类型的集合没有意义。例如。 add是一种对某种只读集合并不实用的操作。它在Javadoc中明确地拼写出来,因此它成为所有集合类提供的内容的一部分,但是有人使用它知道,鉴于某些集合他们并不确切知道,可能是该方法只是抛出一个{ {1}}。

答案 1 :(得分:3)

来自java.util.Collections文档:

  

此界面中包含的“破坏性”方法,即   修改它们运行的​​集合的方法是   指定在此集合时抛出UnsupportedOperationException   不支持该操作。如果是这种情况,这些方法   可以,但不是必须抛出UnsupportedOperationException   如果调用对集合没有影响。例如,   在不可修改的集合上调用addAll(Collection)方法   如果集合可以,但不是必需的,抛出异常   被添加是空的。

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

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

答案 2 :(得分:1)

在JavaDoc中将接口方法指定为 optional 意味着实现此接口的类不一定必须实现该方法。相反,他们可以例如抛出异常。

更具体地说,JavaDoc中的接口方法 optional 并不意味着它是特定于实现的行为。该类的每个具体实现都将指定它是否实现它。查看HashMap类,它包含添加操作,但未将其指定为可选。因此,Java库的每个实现都必须为其HashMap类包含此方法的实现。 TreeMap等也是如此。

将此操作声明为可选的原因可能是因为某些集合在概念上可能是不可变的,例如Collections.unmodifiableSet

返回的集合