Скажем, у меня есть класс Foo на Java, который имеет неизменные данные:
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...
}
Теперь я хотел бы добавить метод утилиты, который создает значение "sibling" с идентичным состоянием, но с новым значением x. Я мог бы назвать его setX()
:
class Foo
{
...
Foo setX(int newX) { return new Foo(newX, this.otherstuff); }
...
}
но семантика setX()
отличается от стандартного соглашения setter для изменяемых объектов bean, поэтому почему-то это не кажется правильным.
Какое лучшее имя для этого метода?
Должен ли я называть его withX()
или newX()
или что-то еще?
edit: дополнительный приоритет в моем случае: у меня есть скриптовые клиенты (через JSR-223 и экспортирующую объектную модель), которые могут легко получить объект Foo
. Однако громоздко, чтобы вызвать конструкторы или создать строителей или что-то еще. Поэтому мне желательно предоставить этот метод в качестве удобства для скриптовых клиентов.