我在查找观察者模式的示例时遇到了以下代码。第 4 个参数是一个字符串,但我想知道那里会发生什么:它是否将实例字段设置lastName为新lastName值然后返回 this lastName?
这种形式的缩短是常见的做法吗?
public void setLastName(String lastName) {
notifyListeners(this, "lastName", lastName, this.lastName = lastName);
}
我在查找观察者模式的示例时遇到了以下代码。第 4 个参数是一个字符串,但我想知道那里会发生什么:它是否将实例字段设置lastName为新lastName值然后返回 this lastName?
这种形式的缩短是常见的做法吗?
public void setLastName(String lastName) {
notifyListeners(this, "lastName", lastName, this.lastName = lastName);
}
这有效地做到了这一点:
public void setLastName(String lastName) {
this.lastName = lastName;
notifyListeners(this, "lastName", lastName, lastName);
}
例如,首先将实例成员lastName设置为参数lastName,然后在调用函数时再次使用相同的值。
我不会说它很常见,尽管有一些成语使用它(见下文);在这种特定情况下,没有特别好的理由这样做。这个想法是“从变量中获取”操作读取lastName只需要发生一次,然后将该值分配给this.lastName并传递给函数。但是编译器和 JVM 不仅要确保清晰的代码(在合理范围内)是有效的,而且它们不能帮助人们理解令人困惑的代码。:-)
正如jlordo在评论中指出的那样,在一些习语中这种分配和使用很常见,例如:
while ((line = in.readLine()) != null) {
// ...
}
调用函数时比较少见,但在这种循环中很常见。
您还可以在复合赋值中看到它,例如:
x = y = z = foo();
...调用foo(),设置z为返回值,然后设置y为相同的值,然后设置x为相同的值(显然,没有重复调用)。