Прежде всего, если он неизменный, сделайте его не поддающимся классификации другим.Обычно используется final
, хотя вы можете скрыть конструктор.Не особенно уместно в этом случае, но статические методы создания позволяют использовать повторяющиеся значения общих значений, выбирать специализированные реализации и исключать некрасивую ромбовидную (<>
) запись.(Если вы вызываете ваш статический метод создания of
, его можно использовать, когда указывается имя типа.)
Добавление обычно записывается как инфикс.Если задействованы подвыражения, это сделает клиентский код намного лучше, хотя синтаксис Java все равно заставит вас везде использовать круглые скобки.Статический метод требует квалификации или import static
для клиента (последний не очень полезен, если у метода есть имя, например and
, а 'import *' - плохо, если есть другой статический метод, который не имеет смысла без квалификации).
Резервировать статические методы для случаев, когда объект в некотором смысле является второстепенным для функции.Например, String
'* join
и format
.
Что касается тестирования, то нет необходимости в макете класса значения или статического метода.Неизменяемые типы должны иметь надежные реализации и поэтому не должны быть подтипами для других.