Java 为什么ArrayList add方法中的返回类型不同?
为什么在和中返回类型不同Java 为什么ArrayList add方法中的返回类型不同?,java,oracle,arraylist,Java,Oracle,Arraylist,为什么在和中返回类型不同 有人能亲切地给我解释一下吗?由于今天的原因,我犯了如下错误 public void Foo(List<String> list) { // do something } .......... public void Foo(列表){ //做点什么 } .......... 并从我的测试类中调用这个方法作为Foo(newarraylist().add(“John”) 我的IDE中有一个编译错误。所以,我注意到该方法不是void返回类型。如果是这样,
有人能亲切地给我解释一下吗?由于今天的原因,我犯了如下错误
public void Foo(List<String> list) {
// do something
}
..........
public void Foo(列表){
//做点什么
}
..........
并从我的测试类中调用这个方法作为Foo(newarraylist().add(“John”)代码>
我的IDE中有一个编译错误。所以,我注意到该方法不是void
返回类型。如果是这样,我不知道为什么这个方法返回boolean类型
附言:很久以前我就认为这个方法是无效的
谢谢你阅读我的问题。你的链接有答案。多加注意
返回true(由Collection.add(E)指定)
从集合中添加(E):
如果此集合因调用而更改,则返回true
另外(感谢马克·罗特维尔):
如果集合由于任何原因拒绝添加某个特定元素,而不是因为它已经包含该元素,则它必须抛出异常(而不是返回false)。这保留了在该调用返回后集合始终包含指定元素的不变量
因此,如果它返回true
,则添加元素;如果它返回false
,则元素已经存在(例如在集合
中),并且在其他情况下需要抛出异常(例如,如果集合
将限制其大小而不是阻塞)
差异的原因是add(E)
的合同在Collection
中定义,而add(int index,E)
在列表
界面中定义(不需要返回任何内容)。它也可以返回true
,但它是无用的。另一个方法必须返回true,因为否则它将破坏集合集合的契约。添加(元素)可以由不添加元素的集合实现。e、 g
Collection<String> col1 = new HashSet<String>();
col1.add("hi"); // return true
col1.add("hi"); // return false
Collection col1=newhashset();
col1.添加(“hi”);//返回真值
col1.添加(“hi”);//返回错误
由于ArrayList还从集合继承add(元素),因此它必须遵循相同的接口
List.add(int,element)不是从集合继承的,因为只有List是可索引的。作为一种收集方法是没有意义的。这意味着它只能由始终添加元素(或引发异常)的集合实现,因此每次返回true
都是多余的。您可能还希望包含以下引号:如果集合拒绝添加特定元素的原因不是因为它已经包含该元素,那么它必须抛出异常(而不是返回false)。这保留了在调用返回后集合始终包含指定元素的不变量。“从我看来,这并不能回答这个问题。他在问为什么一个重载返回void
,另一个boolean
@jeroenvanevel一个方法在集合中定义,另一个在列表中定义列表中指定添加(E)
必须返回true
或throw,因此为添加指定返回值没有意义(int,E)
。