Скажем, у меня есть класс Foo в Java, который имеет непреложное данные: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...
}
Теперь я хотел бы добавить метод утилита, которая создает «родственный» значение с идентичным состоянием, но с новым значением x. Я мог бы назвать его setX()
:
class Foo
{
...
Foo setX(int newX) { return new Foo(newX, this.otherstuff); }
...
}
но семантика setX()
отличается от стандартной инкубационной конвенции изменяемых объектов фасоли, так или иначе это не чувствует себя хорошо.
Какое лучшее название для этого метода?
Должен ли я называть его withX()
или newX()
или еще чем-нибудь?
редактировать: дополнительный приоритет в моем случае: у меня есть сценарии клиенты (через JSR-223 и объектную модель я экспорт), которые можно легко получить Foo
объект. Однако громоздить вызов конструкторов или создать строителей или что-то еще. Поэтому мне желательно предоставить этот метод в качестве удобства для скриптовых клиентов.
Смежный вопрос: http://stackoverflow.com/questions/521893/whats-the-best-name-for-a-non-mutating-add-method-on- ан-неизменная-коллекция. (Это то же самое, что и для этого, но для 'add' вместо' setX'.) – ruakh