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

时间:2015-07-08 20:41:39

标签: java conventions

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

  • TreeSetpublic void add(...)
  • BigIntegerpublic BigInteger add(...)

为什么TreeSet返回类型无效,而BigInteger返回类型为BigInteger

我应该在自己的方法中何时使用void?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

TreeSet set = new TreeSet();
set.add(oneElement).add(anotherElement);

然后是的,您可能选择另一个TreeSet(本身)作为返回类型,而不是将void作为返回类型。我们做出了选择:它是无效的。

设计选择BigInteger为不可变(包含的值不能更改)。因此,它不需要更改自己的值,而是需要返回一个新实例,就像它本身一样,但需要使用新值。 BigInteger上没有'setXxxx()'方法可以使您获得现有BigInteger实例的值。

[更新]

好的 - 你几乎让我在那里。 TreeSet::add没有voidboolean作为返回类型。所以这是另一个设计选择...不仅TreeSet是一个可变对象,他们在尝试添加元素后也想要一些有用的东西:add是否成功。这是因为Set(包括TreeSet仅添加并包含不同的元素。如果元素已经存在,则不会再次添加,add方法会返回false

答案 2 :(得分:0)

基本上当它有意义时。如果您要将某个项目添加到某个集合或其他类型的添加内容,但实际上并未返回任何内容,只需使用void。如果您要将数字添加到其他数字,例如BigInteger的添加功能,则可以返回总和。

答案 3 :(得分:0)

这取决于;通常你会返回一个对象本身的实例,如果它有意义的话#34;这样做。在您的特定示例中,您将看到不可变对象和可变对象之间的区别。 TreeSet个实例是可变的,当您在实例上调用add时,会修改同一个实例。 BigInteger个实例是不可变的,所以当你添加它时,你得到一个带有两个值之和的新实例;原始实例保持不变。

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