Статические фабричные методы вместо конструкторов - PullRequest
0 голосов
/ 24 октября 2019

Я исследовал это после того, как прочитал «Эффективную книгу Java» Джошуа Блока, пункт 1, об использовании фабричных статических методов вместо конструкторов. Там в тексте он защищает использование, когда это возможно, и приводит, среди прочего, возможность применения стандартов Singleton или Flyweight . В нем также приводится случай класса Boolean, который разумно использует Flyweight с помощью метода valueOf (boolean):

public static Boolean valueOf(boolean b) {
return b ? Boolean.TRUE : Boolean.FALSE;
}

Мой вопрос: я понимаю преимущества использования этих шаблонов, но не может быть реализовано в самом конструкторе? Одно только их использование не оправдывает создание статического фабричного метода.

1 Ответ

2 голосов
/ 24 октября 2019

но не может быть реализовано в самом конструкторе?

Нет: new, по спецификации, всегда создает новый экземпляр (или не работает),поэтому new Boolean(b) всегда будет возвращать новый экземпляр Boolean.

Boolean.valueOf возвращает ранее существующий экземпляр. Это желательно, потому что есть только два возможных значения, поэтому нет смысла создавать больше.

...