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