Перечисления Java Популярное объяснение

Home » основы Java » Перечисления Java Популярное объяснение
основы Java Комментариев нет

Что такое перечисления и с чем их едят

Почему я решил написать об этом пост? Потому что на первых порах обучению Java, как ни странно, у меня возникли трудности с постижением этой темы. Мне было не очень понятно зачем нужны перечисления, когда есть такие вещи, как коллекции и массивы. Итак, всем кто задается этим вопросом, я попытаюсь дать предельно краткий, понятный и содержательный ответ:
Перечисление – это инструмент Java, позволяющий удобно оперировать однотипными константами(однотипными как в смысле java, так и в смысле их общей сущности, принадлежности к одному свойству или предмету). Для всего остального есть массивы и коллекции.

Перечисление как класс

Перечисление это такой особый класс, который состоит из констант перечисления. Константы перечисления это экземпляры класса перечисления, которые инициализируются самостоятельно*.
То есть, объявляя класс перечисления,

мы сразу создаем 4 экземпляра объекта Season. Больше экземпляров, с помощью слова new мы создать не можем! Но этих экземпляров нам должно хватить! В этом и есть суть перечислений.
Также, перечисление может содержать конструкторы и методы, причем конструкторы перечисления задействуются сразу. Это удобно, например, если нам нужно задать некие коды нашим однотипным константам. Применяется следующий синтаксис: идут константы, через запятую, как если бы они вызывались с помощью конструктора словом new, затем после ; все необходимые методы и свойства, включая необходимые конструкторы

Этот код(переменную code) мы сможем получить просто извне, как обычное свойство, константу или переменную класса:

(терминология этой записи такова:
State – тип перечисления
Paused – константа перечисления
)

Свойства перечислений о которых следует знать

1) перечисления имеют особый синтаксис
2) нельзя создать объект(экземпляр) перечисления, с помощью new
3) нельзя наследовать перечисление от какого-либо из классов(по умолчанию все перечисления наследуются от класса Enum) и наследоваться от другого класса
4) перечисления имеют особый синтаксис объявления
5) в конструкции Switch, в case не обязательно указывать тип перечисления(например не надо писать case:Apple.ANTONOVKA а просто case:ANTONOVKA) так, как перечисления часто прогоняются этой конструкцией, такая лаконичность кода весьма уместна
6) в перечислениях можно перезагружать методы, в частности, конструкторы. Это полезно, если не для всей последовательности констант сразу мы можем определить значения в аргументах конструктора

Применение Когда нужно применять перечисления

Первый признак того, что в коде неплохо было бы применить перечисления, когда есть список “однотипных” констант, например, отображающих набор определенных состояний какого-либо объекта, или самодостаточных признаков, которые никак, кроме как сами по себе не проявляются, и, также, по отдельности друг от друга, не представляют никакой ценности и ничего не значат.
Например
enabled, disabled, paused, stopped, active
checked, unchecked, readyForCheck
red, white, blue, yellow
fresh, hot, drunk

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

I, II, III, IV […]
и так далее

То есть вместо того, чтобы, создавать коллекцию, массив или в специальный общий интерфейс выводить public static final константы

* Правильнее говорить, что константы перечисления имеют свои экземпляры класса перечисления. Каждая константа имеет свой экземпляр. И эти экземпляры доступны нам статически. (я опустил это, в пользу легкости понимания)

LEAVE A COMMENT