0

在不可变类上编写 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. 请随时提供有关此问题的任何其他反馈。

编辑:

  1. 使用 setFirstName() 方法中创建新对象的方式,是原子完成的吗?
4

1 回答 1

0

问题是,如果Person在您调用方法的地方以外的任何地方引用了这个实例setFirstName(),它就不会在那里更新。

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

于 2014-11-16T03:21:41.700 回答