Подтвердить что ты не робот

Почему объект Boolean имеет открытый конструктор в Java?

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

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