【发布时间】:2012-03-05 16:13:59
【问题描述】:
假设我在 Java 中有一个 Foo 类,它具有不可变的数据:
class Foo {
final private int x;
public int getX() { return this.x; }
final private OtherStuff otherstuff;
public Foo(int x, OtherStuff otherstuff) {
this.x = x;
this.otherstuff = otherstuff;
}
// lots of other stuff...
}
现在我想添加一个实用方法,它创建一个具有相同状态但新值 x 的“兄弟”值。我可以称之为setX():
class Foo
{
...
Foo setX(int newX) { return new Foo(newX, this.otherstuff); }
...
}
但setX() 的语义不同于可变 bean 对象的标准 setter 约定,所以不知何故这感觉不对。
这个方法最好的名字是什么?
我应该叫它withX() 或newX() 还是别的什么?
编辑:在我的情况下的额外优先级:我有脚本客户端(通过 JSR-223 和我导出的对象模型)可以轻松获取 Foo 对象。然而,调用构造函数或创建构建器或其他任何东西都很麻烦。因此,我希望提供此方法以方便脚本客户端。
【问题讨论】:
-
一个相关问题:stackoverflow.com/questions/521893/…。 (与此相同,但为
add而不是setX。)
标签: java immutability