不可变类的Java Mutator实现

时间:2014-11-16 03:11:05

标签: 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.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属性保存。

  1. 这在语义上是否正确?也就是说,它会达到预期的效果吗?

  2. Person类总体上是不可变的吗?最终,线程安全吗?

  3. 如果这种方法可行,应该遵守哪些规则或其他考虑因素?

  4. 请随时提供有关此事的任何其他反馈。

  5. 编辑:

    1. 通过在setFirstName()方法中创建新对象的方式,它是以原子方式完成的吗?

1 个答案:

答案 0 :(得分:0)

事情是,如果这个Person实例被引用到你调用setFirstName()方法的地方以外的任何地方,它就不会在那里更新。

可能是问题或功能。在后一种情况下,我会将方法setFirstName()重命名为cloneWithFirstName(String newFirstName)