我在查找观察者模式的示例时遇到了以下代码。第 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
为相同的值(显然,没有重复调用)。