Java Mutator在不可变类上的实现
在不可变类上编写mutator方法的规则是什么 以下是第一次尝试-请考虑:Java Mutator在不可变类上的实现,java,immutability,mutators,Java,Immutability,Mutators,在不可变类上编写mutator方法的规则是什么 以下是第一次尝试-请考虑: public final class Person { private final String firstName; private final String lastName; public Person(String firstName, String lastName) { this.firstName = firstName; this.last
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()
方法以外的任何地方被引用,它将不会在那里更新
可能是问题或功能。在后一种情况下,我会将方法
setFirstName()
重命名为类似cloneWithFirstName(字符串newFirstName)
什么是“期望的效果”?@PM77-1“返回一个新实例,该实例是旧实例的副本,但firstName属性设置为newFirstName除外。该类被声明为不可变的事实意味着对其(状态/属性)的任何更改都必须创建一个新实例以适应这种更改。”。也许可以重命名mutator方法的命名,例如changeXXX(),其中XXX表示状态/属性描述。但您不能更改实例。您正在创建它的克隆,其中用提供的参数替换一个新字段值。所以它实际上不是一个变异子,它是一种克隆方法。