제이온

[Эффективный Java] Элемент 4. Если нужно запретить создание экземпляров, используйте приватный конструктор

  • Язык написания: Корейский
  • Страна: Все страныcountry-flag
  • ИТ

Создано: 2024-04-28

Создано: 2024-04-28 13:38

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


В качестве примера можно привести утилитарные классы, такие как java.lang.Math, java.util.Arrays, которые объединяют методы, связанные с математическими операциями или массивами. Или, например, java.util.Collections, который может содержать статические фабричные методы для создания объектов, реализующих определенный интерфейс.


В таких утилитарных классах нет необходимости в переменных или методах экземпляра, поэтому конструктор не нужен. Однако, если конструктор не объявлен явно, компилятор автоматически создает открытый (public) конструктор по умолчанию. В результате пользователь не может различить, был ли конструктор создан автоматически или явно.


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



Поэтому, чтобы запретить создание экземпляров утилитарного класса, необходимо сделать модификатор доступа конструктора private.



Если модификатор доступа конструктора по умолчанию является private, то доступ к нему извне класса невозможен. Кроме того, если конструктор по умолчанию вызывается изнутри, он генерирует исключение.


Такой private-конструктор может быть сложным для понимания при использовании, поэтому рекомендуется добавлять комментарии. Кстати, если конструктор объявлен как private, это также запрещает наследование.


Источник

Комментарии0

DI на уровне фреймворка: под силу даже начинающим разработчикам Node.jsСтатья описывает реализацию внедрения зависимостей (DI) в разработке серверов Node.js. Рассматриваются способы реализации DI с использованием функции метаданных Reflect компилятора TypeScript, а также соответствующие библиотеки.
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

November 8, 2024

Получение неизменяемых значений с помощью genericПредставляем способ простой передачи неизменяемых значений в generic с помощью нового ключевого слова TypeScript 5.0. Может использоваться с массивами или литеральными типами, что способствует разработке библиотек и улучшению пользовательского опыта.
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

October 30, 2024

Ковариантность и контравариантностьВ этой статье объясняются понятия ковариантности и контравариантности. На примере Animal и Dog объясняется ковариантность и контравариантность, подчеркивается необходимость контравариантности для обеспечения гибкости, например, в обработке событий. Также
Sunrabbit
Sunrabbit
Sunrabbit
Sunrabbit

November 1, 2024

[Не из IT, но разработчик] 16. Полезные советы по составлению портфолио для начинающих разработчиковМы поделимся советами по составлению портфолио для начинающих разработчиков. Важно подробно описать опыт работы над проектами и свои навыки разработки, а также четко указать, какие сервисы были разработаны.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

[Для неспециалистов, как стать разработчиком] 17. Портфолио начинающего разработчика: до каких пор?Портфолио начинающего разработчика лучше всего структурировать, сосредоточившись на реализации базовых функций CRUD и опыте взаимодействия с внешними API.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024