在不可变类上编写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类总体上是不可变的吗?最终,线程安全吗?
如果这种方法可行,应该遵守哪些规则或其他考虑因素?
请随时提供有关此事的任何其他反馈。
编辑:
答案 0 :(得分:0)
事情是,如果这个Person
实例被引用到你调用setFirstName()
方法的地方以外的任何地方,它就不会在那里更新。
可能是问题或功能。在后一种情况下,我会将方法setFirstName()
重命名为cloneWithFirstName(String newFirstName)