Почему логический объект имеет открытый конструктор в Java? - PullRequest
25 голосов
/ 15 сентября 2011

Документация для конструктора new Boolean(boolean value) в состояниях Java:

Примечание: редко использовать этот конструктор.Если не требуется новый экземпляр, статическая фабрика valueOf(boolean) обычно является лучшим выбором.Скорее всего, это приведет к значительно лучшей производительности в пространстве и времени.

Если так, то почему этот конструктор общедоступен и не устарел?Есть ли веская причина использовать этот конструктор вместо Boolean.valueOf()?

Ответы [ 4 ]

19 голосов
/ 15 сентября 2011

valueOf() добавлен только в Java 1.4, поэтому кажется, что конструкторы существуют для обратной совместимости.

Этот билет объясняет причины отказа от конструкторов:

Из-за нарушения, которое может иметь устаревший API, в настоящее время API должен быть «активно опасным» для устаревания, как Thread.stop.Хотя использование этого конструктора, безусловно, неуместно, оно не поднимается (и не опускается) до уровня опасности, который следует исключить в JDK.В будущем мы можем добавить средство «клеветы», чтобы пометить элементы API, которые не так плохи, что их следует считать устаревшими, но их не следует использовать в большинстве случаев.Этот конструктор был бы хорошим кандидатом на клевету.

Я не могу представить себе реалистичный сценарий, где использование конструкторов Boolean было бы лучшим способом сделать что-то полезное.

7 голосов
/ 15 сентября 2011

Обычно вам нужно использовать valueOf(boolean) или даже Boolean.TRUE / Boolean.FALSE константы напрямую.

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

5 голосов
/ 15 сентября 2011

Другая, не обязательно веская причина, вероятно, состояла бы в том, чтобы просто поддерживать ее в соответствии с другими встроенными оболочками.

0 голосов
/ 15 сентября 2011

Причина, по которой он не устарел, заключается в том, что Java поддерживает обратную совместимость с версией 1.0

Я не могу придумать вескую причину для использования конструктора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...