为什么返回类型在ArrayList添加方法中有所不同?

Cat*_*ysm 0 java oracle arraylist

为什么返回类型在ArrayList.add(E e)ArrayList.add(int index,E element)中有所不同?
有人能帮我解释一下吗?因为今天我收到如下错误..

public void Foo(List<String> list) {
    // do something
}
..........
Run Code Online (Sandbox Code Playgroud)

Foo(new ArrayList<String>().add("John")); 我在IDE中遇到编译错误时,从我的测试类中调用此方法.所以,我注意到ArrayList.add(E e)方法不是 void返回类型.如果是这样,我不知道为什么这个方法返回布尔类型.

PS:我认为ArrayList.add(E e)方法在很长一段时间之前都有void方法.

感谢您阅读我的问题.

Kay*_*man 5

你的链接有答案.更加注意!

Returns true (as specified by Collection.add(E))

来自Collection.add(E):

Returns true if this collection changed as a result of the call

另外(感谢Mark Rotteveel):

"如果一个集合因为它已经包含该元素之外的任何原因拒绝添加一个特定的元素,它必须抛出一个异常(而不是返回false).这保留了一个集合总是在该调用返回后包含指定元素的不变量".

因此,如果它返回true,则添加元素,如果它返回false元素已经存在(例如在a中Set),并且在其他情况下需要抛出异常(例如,如果a Collection将限制其大小而不是阻塞).

差异的原因是合同add(E)定义在Collection,而add(int index, E e)List接口中定义(并且不需要返回任何东西).它也可以返回true,但它将毫无用处.另一种方法必须返回true,否则会破坏合同Collection.

  • 您可能还希望包含引号:_"如果集合因为已经包含元素的原因而拒绝添加特定元素,则必须抛出异常(而不是返回false).这样可以保留不变量.在此调用返回后,collection始终包含指定的元素."_来自http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#add(E) (2认同)