При создании классов для «неизменяемых объектов» неизменяемый означает, что состояние экземпляров не может быть изменено; все поля, назначенные в конструкторе) в Java (и подобных языках), иногда полезно разрешить создание измененных экземпляров. То есть использование экземпляра в качестве основы и создание нового экземпляра, который отличается только одним значением свойства; другие значения поступают из базового экземпляра. Чтобы дать простой пример, можно иметь такой класс:
public class Circle {
final double x, y; // location
final double radius;
public Circle(double x, double y, double r) {
this.x = x;
this.y = y;
this.r = r;
}
// method for creating a new instance, moved in x-axis by specified amount
public Circle withOffset(double deltaX) {
return new Circle(x+deltaX, y, radius);
}
}
Итак: какой должен быть вызван метод withOffset? (примечание: НЕ то, как должно быть его имя, а как называется этот класс методов). Чтобы дать простой пример, можно иметь такой класс:
public class Circle {
final double x, y; // location
final double radius;
public Circle(double x, double y, double r) {
this.x = x;
this.y = y;
this.r = r;
}
// method for creating a new instance, moved in x-axis by specified amount
public Circle withOffset(double deltaX) {
return new Circle(x+deltaX, y, radius);
}
}
Итак: какой должен быть вызван метод withOffset? (примечание: НЕ то, как должно быть его имя, а как называется этот класс методов). Чтобы дать простой пример, можно иметь такой класс:
public class Circle {
final double x, y; // location
final double radius;
public Circle(double x, double y, double r) {
this.x = x;
this.y = y;
this.r = r;
}
// method for creating a new instance, moved in x-axis by specified amount
public Circle withOffset(double deltaX) {
return new Circle(x+deltaX, y, radius);
}
}
Итак: какой должен быть вызван метод withOffset? (примечание: НЕ то, что должно быть, а как называется этот класс методов). Технически это своего рода фабричный метод, но почему-то мне это кажется не совсем правильным, поскольку часто фабрикам присваиваются просто базовые свойства (и они являются либо статическими методами, либо не являются членами типа результата, а типа фабрики).
Так что я полагаю, что для таких методов должен быть лучший термин. Поскольку эти методы могут использоваться для реализации « fluent interface », возможно, они могут быть «свободными заводскими методами»? Лучшие предложения?
РЕДАКТИРОВАТЬ: как было предложено в одном из ответов, java.math.BigDecimal
является хорошим примером с его методами 'add', 'subtract' (и т. Д.).
Также: I заметил, что есть этот вопрос (не менее Джона Скита), который является своего рода связанным (хотя он спрашивает о конкретном названии метода)
РЕДАКТИРОВАТЬ, МАЙ-2014: Мой текущий фаворит - мутант завод
, FWIW.