我遇到了这段代码:
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),尽管这段代码使用它就像它没有返回任何内容一样。
怎么可能?
答案 0 :(得分:2)
您不必使用registerListener()
返回的值。
考虑以下代码:
void performOperation() {
doSomething();
}
如果操作成功完成, doSomething
执行某些操作并返回true
,否则返回false
。
performOperation
return
不是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