在方法参数内设置实例字段值

Jer*_*vel 0 java observer-pattern

在查找Observer模式的示例时,我遇到了以下代码.第四个参数是一个String,但我想知道那里发生了什么:它是否将实例字段lastName设置为新lastName值然后返回lastName

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

 public void setLastName(String lastName) {
  notifyListeners(this, "lastName", lastName, this.lastName = lastName);
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

这有效地做到了:

public void setLastName(String lastName) {
  this.lastName = lastName;
  notifyListeners(this, "lastName", lastName, lastName);
}
Run Code Online (Sandbox Code Playgroud)

例如,首先将实例成员lastName设置为参数lastName,然后在调用函数时再次使用该值.

我不会说这是常见的,虽然有一些习惯使用它(见下文); 在这种特定情况下,没有特别好的理由这样做.这个想法是"从变量获取"操作lastName只需要发生一次,然后将该值分配给this.lastName函数并传递给函数.但是编译器和JVM不仅可以确保清晰的代码(在合理范围内)是有效的,而且它们无法帮助人们理解令人困惑的代码.:-)

正如jlordo在评论中指出的那样,有一些习惯用法,这种分配和使用很常见,例如:

while ((line = in.readLine()) != null) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

调用函数时更为罕见,但在这种循环中很常见.

您还可以在复合赋值中看到它,例如:

x = y = z = foo();
Run Code Online (Sandbox Code Playgroud)

...调用foo(),设置z为返回值,然后设置y为相同的值,然后设置x为相同的值(显然,不重复调用).

  • 在从文件`while((line = in.readLine())!= null){`读取行的情况下,这种情况很常见 (2认同)