为什么方法Queue#add()有布尔返回值?

时间:2014-06-09 07:38:03

标签: java collections queue

我修改了关于Queue的知识。我看着Queue界面。

方法add有以下声明:

boolean add(E e);

在java doc中写道如下:

 * @return <tt>true</tt> (as specified by {@link Collection#add})

因此这种方法只能返回真实!!!为什么此方法不返回声明为void的值?

这种方法声明对我来说足够混乱。

3 个答案:

答案 0 :(得分:4)

如果您查看Collection#add的文档,就会很清楚:

  

true如果此集合因调用而改变

由于调用后队列总是发生变化,Queue#add始终必须返回true。 (并且必须有一个返回值,才能正确实现接口。)

Set比较,{{3}}也会实现Collection,如果该元素尚未在该集合中,则只会添加该元素,因此可能会从{{{{}}返回false 1}}。

答案 1 :(得分:1)

Queue实现Collection这是一个更通用的接口。在java中,您无法在不包含最初声明的所有方法的情况下实现或扩展接口,因此,在这种情况下,您有时会将带有存根方法的类作为add

集合add method声明为:

boolean add(E e)

因此必须在Queue宣布。在列表中,根据队列数据结构的性质,其返回值始终为true,但不适用于其他数据结构。

想象一下,您正在开发一个实现Collection接口的新数据结构,该接口在内部使用数组来存储其元素。在这种情况下,您可能会发现在添加新元素时返回false很有用:您已经可以使用所有数组位置。

答案 2 :(得分:0)

方法java.util.Queue.add(E)重写方法java.util.Collection.add(E)。因此,它必须遵循方法覆盖的规则。

此规则之一是方法java.util.Queue.add(E)的返回类型必须是方法java.util.Collection.add(E)的子类型。因为方法java.util.Collection.add(E)返回一个布尔值,所以方法java.util.Queue.add(E)也必须返回一个布尔值。

方法java.util.Queue.add(E)是布尔值true,因为每次我们在其中添加新对象时都会更改队列。