Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么ArrayList add方法中的返回类型不同?_Java_Oracle_Arraylist - Fatal编程技术网

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)