Java 关于add()方法的返回类型的约定

Java 关于add()方法的返回类型的约定,java,conventions,Java,Conventions,add(…)方法的Java编程约定是什么?例如: TreeSet:公共作废添加(…) biginger:公共biginger添加(…) 为什么TreeSet的返回类型为void,而biginger的返回类型为biginger 什么时候我应该在我自己的方法中使用void?基本上是在有意义的时候。如果要将项目添加到集合或其他类型的添加,而这些添加实际上不返回任何内容,但只对对象有效,请使用void。如果将一个数字与另一个数字相加,就像BigInteger的add函数那样,可以返回总和。这取决于实

add(…)
方法的Java编程约定是什么?例如:

  • TreeSet
    公共作废添加(…)
  • biginger
    公共biginger添加(…)
为什么
TreeSet
的返回类型为void,而
biginger
的返回类型为
biginger


什么时候我应该在我自己的方法中使用void?

基本上是在有意义的时候。如果要将项目添加到集合或其他类型的添加,而这些添加实际上不返回任何内容,但只对对象有效,请使用
void
。如果将一个数字与另一个数字相加,就像BigInteger的add函数那样,可以返回总和。

这取决于实际情况;通常,如果返回对象本身的实例“有意义”,则返回该实例。在您的特定示例中,您看到了不可变对象和可变对象之间的区别
TreeSet
实例是可变的,当您对实例调用
add
时,会修改同一个实例
BigInteger
实例是不可变的,因此当您添加到它时,您将得到一个包含两个值之和的新实例;原始实例保持不变


在某些情况下,该方法可能会返回自身的实例,因为它可以用来提供流畅的界面。

如果您的
add
操作是不可变的,它应该返回一些值(这是
biginger
的情况)。否则,您应该返回
void
(例如,
Collection
的情况下,
TreeSet
)。

这是一种设计选择。它主要围绕您希望对象(实例)是可变的还是不可变的问题

一个集合,包括
TreeSet
是可变的,因为很明显,您希望向其中添加元素。通过向自身添加对象,您可以“更改”实例及其包含的值。它不必返回任何东西。但是,一些开发人员希望能够链接多个操作,因此,如果您希望:

TreeSet set = new TreeSet();
set.add(oneElement).add(anotherElement);
然后是的,您可以选择另一个树集(本身)作为返回类型,而不是将void作为返回类型。我们做出了选择:这是无效的

设计将
BigInteger
选择为不可变(包含的值不能更改)。因此,它需要返回一个新实例,与自身非常相似,但具有新值,而不是更改自己的值。
biginger
上没有可用的“setXxxx()”方法允许您输入现有
biginger
实例的值

[更新]


好吧,你差点把我弄到手
TreeSet::add
没有
void
作为返回类型,而是
boolean
。所以这是另一个设计选择。。。树集不仅是一个可变对象,在尝试添加元素后,他们还需要一些有用的东西:添加是否成功。这是因为
集合
,包括
树集
只添加并包含不同的元素。如果元素已经存在,就不会再添加它,
add
方法将返回一个
false

BigInteger。add
直接映射到一个数学运算,因此它当然会返回一些东西。和
TreeSet.add
确实返回一个值-它返回一个
布尔值
,指示元素是否已存在于集合中。可能重复