Java Урок 49: ПЕРЕЧИСЛЕНИЯ, примеры

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

Скачать исходники для статьи можно ниже

Например, ниже показано простое перечисление сортов яблок:

// Перечисление сортов яблок,
enum Apple {
   Jonathan, GoldenDel, RedDel, Winesap, Cortland
}

Идентификаторы Jonathan, GoldenDel и так далее называются константами
перечисления. Каждая из них явно объявлена как открытый статический финальный член класса Apple. Более того, их тип — это тип перечисления, в котором они объявлены; в данном случае это Apple.
То есть в языке Java эти константы называются самотипизированными, причем само относится к окружающему перечислению.
Объявив перечисление, вы можете создавать переменные этого типа.

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

Например, ниже объявляется переменная ар перечислимого типа Apple.

Apple ар;

Поскольку переменная ар имеет тип Apple, присвоить ей можно только те
значения, которые определены в перечислении. Например, здесь переменной ар присваивается значение RedDel:

ар = Apple.RedDel;

Обратите внимание на то, что значению RedDel предшествует тип Apple.

Две перечислимые константы можно проверять на равенство с помощью оператора отношения ==.

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

if (ар == Apple.GoldenDel) // ...

Перечислимые значения также могут быть использованы в управляющей конструкции switch. Конечно же, все операторы case должны использовать константы из того же перечисления enum, что и выражение switch.

Например, следующий оператор switch абсолютно корректен.

// Использование enum для управления switch,
switch(ар) {
   case Jonathan:
   // ...
   case Winesap:
   // ...

Обратите внимание на то, что в операторах case имена перечислимых констант используются без квалифицированного имени их типа перечисления. То есть применяется Winesap, а не Apple. Winesap.
Дело в том, что тип перечисления в операторе switch уже неявно задает тип перечисления для операторов case. Нет необходимости квалифицировать константы в операторах case именем типа их перечисления. Фактически попытка сделать это приведет к ошибке
компиляции.

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

System.out.println(Apple.Winesapp)

отобразит имя Winesapp.

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

// Перечисление сортов яблок,
enum Apple {
   Jonathan, GoldenDel, RedDel, Winesap, Cortland
}

class EnumDemo {
   public static void main(String args[]){
      Apple ар;
      ар = Apple.RedDel;
      // Вывод значения enum.
      System.out.println("Значение ар: " + ар);
      System.out.println();
      ар = Apple.GoldenDel;
      // Сравнение двух перечислимых значений.
      if(ар == Apple.GoldenDel)
      System.out.println("ар содержит GoldenDel.");
      // Применение enum для управления оператором switch.
      switch(ар) {
      case Jonathan:
         System.out.println("Jonathan красный.");
         break;
      case GoldenDel:
         System.out.println("Golden Delicious желтый.");
         break;
      case RedDel:
         System.out.println("Red Delicious красный.");
         break;
      case Winesap:
         System.out.println("Winesap красный.");
         break;
      case Cortland:
         System.out.println("Cortland красный.");
         break;
      }
   }
}

Эта программа создает следующий вывод:
Значение ар: RedDel
ар содержит GoldenDel.
Golden Delicious желтый.

Введите свой email адрес для того, чтобы подписаться на мой блог:


knopkisoc

Добавить комментарий