我修改了关于Queue
的知识。我看着Queue
界面。
方法add
有以下声明:
boolean add(E e);
在java doc中写道如下:
* @return <tt>true</tt> (as specified by {@link Collection#add})
因此这种方法只能返回真实!!!为什么此方法不返回声明为void
的值?
这种方法声明对我来说足够混乱。
答案 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,因为每次我们在其中添加新对象时都会更改队列。