0

我在查找观察者模式的示例时遇到了以下代码。第 4 个参数是一个字符串,但我想知道那里会发生什么:它是否将实例字段设置lastName为新lastName值然后返回 this lastName

这种形式的缩短是常见的做法吗?

 public void setLastName(String lastName) {
  notifyListeners(this, "lastName", lastName, this.lastName = lastName);
}
4

1 回答 1

6

这有效地做到了这一点:

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为相同的值(显然,没有重复调用)。

于 2012-12-14T10:16:56.593 回答