Java 为什么方法队列#add()具有布尔返回值?
我修改了关于队列的知识。我观察Java 为什么方法队列#add()具有布尔返回值?,java,collections,queue,Java,Collections,Queue,我修改了关于队列的知识。我观察队列界面 方法add具有以下声明: boolean add(E e); 在java文档中,写入以下内容: * @return <tt>true</tt> (as specified by {@link Collection#add}) *@return true(由{@link Collection#add}指定) 因此此方法只能返回true!!!为什么此方法不返回声明为void的值 这个方法声明对我来说已经够混乱的了。队列实现了集合
队列
界面
方法add
具有以下声明:
boolean add(E e);
在java文档中,写入以下内容:
* @return <tt>true</tt> (as specified by {@link Collection#add})
*@return true(由{@link Collection#add}指定)
因此此方法只能返回true!!!为什么此方法不返回声明为void
的值
这个方法声明对我来说已经够混乱的了。
队列
实现了集合
,这是一个更通用的接口。在java中,如果不包含接口最初声明的所有方法,就无法实现或扩展接口,因此,在这种情况下,有时会得到带有存根方法的类,如add
集合声明为:
boolean add(E e)
因此,它必须在队列中声明。在列表中,由于队列数据结构的性质,其返回值将始终为真,但对于其他数据结构,则不为真
假设您正在开发一个新的数据结构,实现集合
接口,该接口在内部使用数组存储其元素。在这种情况下,在添加新元素时返回false
可能会很有用:您可能已经使用了所有数组位置。如果您查看文档,就会清楚:
true
如果此集合因调用而更改
由于队列总是随着调用而改变,queue#add
总是必须返回true
。(为了正确实现接口,它必须有一个返回值。)
与相比,它还实现了Collection
,它只会在元素不在集合中时添加元素,因此可能会从add
返回false
,方法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,因为每次我们向队列中添加新对象时,队列都会发生更改。总是返回true
的方法有什么令人困惑的地方?只需忽略返回值:-)