Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Отсутствие экземпляров обеспечивает закрытый конструктор

Читайте также:
  1. В наших примерах мы ни разу не рассматривали конструкторы классов, поэтому при создании экземпляров наших классов вызывался конструктор класса object.
  2. Все женщины наделены от природы способностью кормить грудью своих детей. Ранний и тесный контакт с ребенком обеспечивает продукцию достаточного количества молока.
  3. Вызов конструктора из конструктора
  4. Гарантированная инициализация при использовании конструктора
  5. Глава 6. Она не хочет быть лицемеркой, он жалуется на отсутствие уважения
  6. Дадим конструкторам шанс
  7. Задание 13. Составьте меню элементов строительного конструктора. Создайте архитектурное сооружение.
  8. Закрытый путь — сбой в полосатости
  9. Какая функция письма обеспечивает внешние связи организации
  10. Классы Java. Конструкторы, методы, наследование классов, управление доступом к методам и переменным класса, ключевые слова this и super.

 

Время от времени приходится писать класс, который является всего лишь со­бранием статических методов и статических полей. Такие классы приобрели дурную репутацию, поскольку отдельные личности неправильно пользуются ими с целью написания процедурных программ с помощью объектно-ориентированных языков. Подобные классы требуют правильного применения. Их можно использ~ать для того, чтобы собирать вместе связанные друг с другом методы обработки простых значений или массивов, как это сделано в библиотеках java.lang.Math и java.util.Arrays, либо чтобы собирать вместе статические методы объектов, которые реализуют опреде­ленный интерфейс, как это сделано в j ауа.util.Collections. Можно также собрать Методы в некоем окончательном (fina!) классе вместо того, чтобы заниматься расшире­нием Класса.

Подобные классы утилит (uti!ity c!ass) разрабатываются не для того, чтобы СОздавать для них экземпляры - такой экземпляр был бы абсурдом. Однако если у Класса нет явных конструкторов, компилятор по умолчанию сам создает для него ОТКРытый конструктор (defau!t constructor), не имеющий параметров. Для пользовате­ля этот Конструктор ничем не будет отличаться от любого другого. В опубликованных АРI нередко можно встретить классы, непреднамеренно наделенные способностью порождать экземпляры.

 

 

 

 

Попытки запретить классу создавать экземпляры, объявив его абстрактным, не работают. Такой класс может иметь подкласс, для которого можно' создавать экземпляры. Более того, это вводит пользователя в заблуждение, заставляя думать, что данный класс был разработан именно для наследования (статья 15). Существует, однако, простая идиома, гарантирующая отсутствие экземпляров. Конструктор по умолчанию создается только тогда, когда у класса нет явных конструкторов, и потому запретить создание экземпляров можно, поместив в класс единственный явный закрытый конструктор:

 

// Класс утилит, не имеющий экэемпляров

public class UtilityClass {

// Подавляет появление конструктора по умолчанию, а заодно и создание экземпляров класса

private UtilityClass() {

// Этот конструктор никогда не будет вызван

 

}

//... // Остальное опущено

}

 

Поскольку явный конструктор заявлен как закрытый (private), за пределами класса он будет недоступен. И если конструктор не вызывается в самом классе, это является гарантией того, что для класса никогда не будет создано никаких экземпля­ров. Эта идиома несколько алогична, так как конструктор создается здесь именно для того, чтобы им нельзя было пользоваться. Есть смысл поместить в текст про граммы комментарий, который описывает назначение данного конструктора.

Побочным эффектом является то, что данная идиома не позволяет создавать подклассы для этого класса. Явно или неявно, все конструкторы должны вызывать доступный им конструктор суперкласса. Здесь же подкласс лишен доступа к конст­руктору, к которому можно было бы обратиться.

 




Дата добавления: 2015-09-11; просмотров: 107 | Поможем написать вашу работу | Нарушение авторских прав

Джошуа Блох | Исключения | Введение | Рассмотрите возможность замены конструкторов статическими методами генерации. | Уничтожайте устаревшие ссыпки (на объекты) | Остерегайтесь методов flnalize | Переопределяя метод equals, соблюдайте общие соглашения | Переопределяя метод equals, всегда переопределяйте hashCode | Всегда переопределяйте метод toStrlng | Соблюдайте осторожность при переопределении метода Сlоnе |


lektsii.net - Лекции.Нет - 2014-2025 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав