Основные положения о перечислениях в Java

Основные положения о перечислениях в JavaДо версии JDK5 явно недоставало перечислений — одного из языковых средств, потребность в котором остро ощущали многие программирующие нa Java.

В про­стейшей форме перечисление представляет собой список именованных констант. Несмотря на то что в Java имеются другие языковые средства с похожими функ­циональными возможностями, например завершенные переменные, многим про­граммирующим нa Java все же не хватало принципиальной ясности перечислений, особенно потому, что они применяются во многих других языках программиро­вания.

В версии JDК5 перечисления были внедрены в Java и наконец-то стали до­ступны для программирования на этом языке.

В простейшей форме перечисления в Java похожи на перечисления в других языках программирования, но это поверхностное сходство.

В языках вроде С++ перечисления просто являются списками целочисленных констант. А в Java пере­числения определяют тип класса.

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

Например, перечисления в Java могут иметь конструкторы, методы и переменные экземпля­ра. И несмотря на то что внедрения перечислений пришлось ждать несколько лет, реализация их в Java того стоила.

Перечисления создаются с помощью ключевого слова enum. В качестве приме­ра ниже показано простое перечисление сортов яблок.

Идентификаторы Jonathan, GoldenDel и так далее называются коистаитами перечислимого типа. Каждая из них явно объявлена как открытый статический ко­нечный член класса Apple.

Более того, они относятся к типу того перечисления, в котором объявлены (в данном случае — Apple ). В языке Java такие константы называются самотипизированными, причем префикс само относится к охватываю­щему их перечислению.

Объявив перечисление, можно создавать переменные данного типа. Но, не­смотря на то, что перечисления определяют тип класса, получать экземпляры класса типа enum с помощью оператора new нельзя.

Вместо этого переменная перечисления объявляется и применяется практически так же, как и переменные примитивных типов.

В приведенном ниже примере объявляется переменная ар перечислимого типа Apple:

Переменная ар относится к типу Аррlе, и поэтому ей можно присвоить только те значения, которые определены в перечислении.

В следующем примере пере­менной ар присваивается значение RedDel:

Обратите внимание н а то, что значению RedDel предшествует тип Apple. Две константы перечислимого типа можно проверять на равенство с помощью опера­ции отношения ==.

Например, в следующем условном операторе переменная ар сравнивается с константой Apple.GoldenDel:

Значения перечислимого типа можно также использовать в упрамяющем опе­раторе switch. Разумеется, для этого во всех выражениях ветвей case должны использоваться константы из того же самого перечисления, что и в самом опе­раторе switch.

Например, следующий оператор switch составлен совершенно правильно:

Обратите внимание на то, что в выражениях ветвей case имена констант ука­зываются без уточнения имени их перечислимого типа, например Winesap, а не Apple.Winеsар.

Дело в том, что тип перечисления в операторе switсh уже неявно задает тип перечисления для выражений в ветвях case.

Следовательно, уточнять имена констант в выражениях ветвей case не нужно. В действительности любая попытка сделать это приведет к ошибке во время компиляции.

Когда выводится константа перечислимого типа, например, методом println(), то отображается ее имя. Например, в следующей строке кода:

выводится имя Winesap.

Приведенный ниже пример программы подытоживает все сказанное выше, де­монстрируя применение перечисления Apple.

Эта программа выводит следующий результат:

Cоветуем вам следующее обучающее видео: