在不可变类上编写 mutator 方法的规则是什么?
以下是第一次尝试 - 考虑:
public final class Person
{
private final String firstName;
private final String lastName;
public Person(String firstName, String lastName)
{
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() { return this.firstName; }
public String getLastName() { return this.lastName; }
public Person setFirstName(String newFirstName)
{
return new Person(newFirstName, this.lastName);
}
}
setFirstName() 方法显然是感兴趣的修改器——它应该返回一个新实例,它是旧实例的副本,并将 newFirstName 值保存为 firstName 属性。
这在语义上正确吗?也就是说,它会达到预期的效果吗?
Person 类总体上是否仍然不可变?最终,线程安全?
如果这种方法可行,应遵守哪些规则或其他注意事项?
请随时提供有关此问题的任何其他反馈。
编辑:
- 使用 setFirstName() 方法中创建新对象的方式,是原子完成的吗?