Со временем стало ясно, что, поскольку вы не называете параметры в вызове, трудно создавать объекты с использованием различных методов, если необязательные значения имеют одинаковый тип.
Одним (довольно глупым) примером будет класс Person
, который может позволить указать только имя или фамилию. В этом случае следующие конструкторы не будут работать:
Person(String firstName, String lastName)
Person(String firstName)
Person(String lastName)
Первый вариант в порядке, но два других конфликтуют и не могут быть разрешены, потому что вы не можете назвать конструктор или параметр.
Использование статических фабричных методов позволяет называть методы там, где это необходимо:
Person of(String firstName, String lastName)
Person ofFirstName(String firstName)
Person ofLastName(String lastName)
Общее of
используется, когда вам не нужно называть его. Он все еще может быть перегружен так же, как конструкторы могут быть перегружены, например, Вы также можете иметь:
Person of(String firstName, String lastName, int age)
Хотя метод фабрики используется не так часто, как обычно, он также может возвращать подкласс, если сочтет это необходимым.
Для интерфейсов такой фабричный метод является хорошим удобством для создания экземпляра объекта, реализующего интерфейс, вместо использования фабричного метода в другом классе.
До статического метода интерфейса JDK реализовал Arrays.asList(...)
для создания списка явно заданных объектов. С введением в язык статических методов интерфейса этот метод теперь (также) реализован на самом интерфейсе List
как List.of(...)
.
Кроме того, они также добавили удобные методы для Set.of(...)
и Map.of(...)
.