为什么有时不需要使用方法的返回值?

时间:2010-12-08 10:16:26

标签: java

我偶然发现了这个问题,似乎无法找到一个令人满意的答案。在Java中考虑以下行:

ListBox.getValue(ListBox.getSelectedIndex())

getValue()方法返回一个String,但我没有把它写成

String foo = ListBox.getValue(ListBox.getSelectedIndex())

保存返回的值。

为什么在第一种情况下编写语句不会引起警告,甚至是错误?

3 个答案:

答案 0 :(得分:3)

返回的值“丢失”,因为它没有被分配给任何变量。

有时你只是为副作用调用一个函数而对返回值不感兴趣,因此没有警告。

答案 1 :(得分:1)

检查特定代码:

ListBox.getValue(ListBox.getSelectedIndex())

我不熟悉Java GUI,但是可以想象ListBox可能没有选定的索引,在这种情况下它会返回一个标记值,例如-1。如果你调用ListBox.getValue(-1),会发生什么?一个疯狂的猜测:它可能会抛出异常。所以,也许这段代码实际上是在说“如果在列表框中没有做出选择,那就是异常(我想在其他地方发现它)”。

答案 2 :(得分:1)

一个函数可以有一个返回值和一个副作用。一些纯粹主义者不喜欢这样,但它就是这样。

如果您只对副作用感兴趣但不对返回值感兴趣,则无需将返回值存储在任何位置。 (“副作用”是函数调用导致状态改变的地方)。

在像垃圾收集的Java这样的语言中,返回的String会立即被垃圾收集,尽管在实际清理时它不会是确定性的。在C ++中,如果将对象作为“临时”(如std :: string)返回,则该对象将在调用后立即删除(尽管您可以将其绑定到const-reference,该const-reference将其生命周期保留为引用的生命周期 - 参考可以增加对象的生命周期的罕见例外。)