一个应该返回值的方法可以像没有返回任何内容的方法一样使用(void)吗?

时间:2013-07-14 09:01:08

标签: java android methods return void

我遇到了这段代码:

sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_NORMAL);

并且方法registerListener()返回一个布尔值(http://developer.android.com/reference/android/hardware/SensorManager.html#registerListener(android.hardware.SensorEventListener,android.hardware.Sensor,int,android.os.Handler),尽管这段代码使用它就像它没有返回任何内容一样。

怎么可能?

3 个答案:

答案 0 :(得分:2)

您不必使用registerListener()返回的值。

考虑以下代码:

void performOperation() {
    doSomething(); 
}
如果操作成功完成,

doSomething执行某些操作并返回true,否则返回falseperformOperation return不是delete,它只是执行操作。

另一个例子:

public boolean delete()

  

返回:        当且仅当文件或目录被成功删除时才返回true;否则是假的

您不必使用modifier return-type name(parameters ..)方法返回的值(但强烈建议使用)。


<强>澄清

在这种情况下,您可能会对method signature感到困惑。

方法声明如下:

{{1}}

当您的方法声明返回某些内容时,必须返回一些内容!但是如果你在另一个没有返回的方法中使用它(void),那么你就不会被迫使用这个值。

答案 1 :(得分:0)

Java不会强制您将表达式的值赋给变量,包括方法调用。标准库中有很多这样的示例 - 例如,Map.put返回与键关联的先前值,这可能很有用,但通常会被忽略。

Map<String, String> map = new HashMap<String, String>();
map.put("a", "1"); // Ignoring the returned value
String previousValue = map.put("a", "2"); // Assigning the returned value ("1") to a new variable

相关的一点:您甚至可以忽略new返回的对象的新实例(但这样做可能没有好的用例):

new HashMap<String, String>();

答案 2 :(得分:0)

在Java中,可以通过添加分号将每个表达式转换为语句。表达式计算的值将被忽略。

这不仅限于方法调用表达式;以下内容也有效。

int a=2;
a + 40;  // compute 42, don't store

你可能比你想象的更多。对变量的赋值也是一个表达式,其值通常被丢弃。你很少看到这样的代码:

int b = (a = 56); // store result of assignment