В Java изброяванията (enums) са специален тип, използван за дефиниране на група наименувани константи.
- Енумите помагат за поддръжката на четимост и безопасността на типа в програмите, като присвояват смислени имена на целочислени стойности.
- Основно полезно, когато имаме малък набор от възможни стойности за елемент като упътвания дни от седмицата и т.н.
Създаване на Enum
Синтаксис:
Javaenum EnumName {
CONSTANT1 CONSTANT2 CONSTANT3;
}
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Изход
RED
Декларация на enum в Java
Декларацията на Enum може да се направи извън клас или вътре в клас, но не и в метод.
1. Декларация извън класа
Както видяхме в горния пример, enum-ите могат да бъдат декларирани извън клас и достъпни директно
2. Декларация вътре в клас
Енумите също могат да бъдат декларирани в клас, но не и в метод.
Java
public class Test { enum Color { RED GREEN BLUE; } // Driver method public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } }
Изход
RED
Свойства на Enum в Java
Има определени свойства, последвани от Enum, както е споменато по-долу:
- Тип клас: Вътрешно имплементиран като клас.
- Enum константи: Всяка константа е обект от типа enum.
- Поддръжка на превключвател: Може да се използва в оператори за превключване.
- Неявни модификатори: Константите са публични статични окончателни.
- Наследство: Enum не могат да разширяват класове, но могат да имплементират интерфейси.
Enum в оператор Switch
Енумите могат да се използват в оператори за превключване за обработка на различни случаи въз основа на константите на енума.
Javaimport java.io.*; class GFG{ // Enum Declared enum Color { RED GREEN BLUE YELLOW; } public static void main(String[] args){ Color var_1 = Color.YELLOW; // Switch case with Enum switch (var_1) { case RED: System.out.println('Red color'); break; case GREEN: System.out.println('Green color'); break; case BLUE: System.out.println('Blue color'); break; default: System.out.println('Other color'); } } }
Изход
Other color
Enum с методи и конструктор
Енумите могат да имат конструктори и методи, изпълнявани отделно за всяка константа
Javaenum Color{ RED GREEN BLUE; private Color(){ System.out.println('Constructor called for: ' + this); } public void display(){ System.out.println('Color is: ' + this); } } public class Test{ public static void main(String[] args){ Color c1 = Color.RED; c1.display(); } }
Изход
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Енум с абстрактни методи
Енумите могат да декларират абстрактни методи, които всяка константа трябва да имплементира.
Javaenum Day{ MONDAY{ public String getNumber(){ return '1st day'; } } FRIDAY{ public String getNumber(){ return '5th day'; } }; public abstract String getNumber(); } public class EnumTest { public static void main(String[] args){ System.out.println(Day.MONDAY.getNumber()); System.out.println(Day.FRIDAY.getNumber()); } }
Изход
1st day 5th day
Итериране на енуми с помощта на values()
Използвайте EnumType.values(), за да преминете през всички enum константи.
Javaenum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Изход
RED GREEN BLUE
Enum и EnumSet (итерация на специфичен диапазон)
EnumSet.range() позволява итерация в определен диапазон от enum константи.
Javaimport java.util.EnumSet; public class EnumSetExample{ enum Day{ SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY; } public static void main(String[] args){ EnumSet<Day> workDays = EnumSet.range(Day.TUESDAY Day.FRIDAY); for (Day d : workDays){ System.out.println(d); } } }
Изход
TUESDAY WEDNESDAY THURSDAY FRIDAY
Създаване на клас с член Enum
Можем да комбинираме enums с редовни класове, за да организираме вашата програмна логика. Enum може да бъде променлива член в клас и методите могат да извършват действия въз основа на стойността на enum.
Java/*package whatever //do not write package name here */ import java.io.*; enum Day { MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY } public class EnumTest { // Enum member variable Day day; // constructor which takes enum value public EnumTest(Day day) { this.day = day; } // method to execute action as per enum value public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println('Mondays are tough'); break; case TUESDAY: System.out.println('Tuesday are better'); break; case WEDNESDAY: System.out.println('Wednesday are okay'); break; case THURSDAY: System.out.println('Thursdays are hopeful'); break; case FRIDAY: System.out.println('Fridays are exciting'); break; case SATURDAY: System.out.println('Saturdays are relaxing'); break; case SUNDAY: System.out.println('Sunday are for rest'); break; default: System.out.println('Everyday are good'); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); } }
Изход
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Обяснение:
- Класът EnumTest в горния код е създаден с член от тип Day. Има конструктор, който приема Day enum като аргумент и го присвоява.
- Класът има метод tellItLikeItIs(), който отпечатва съобщение въз основа на стойността на деня.
- Основният метод включва обекти на EnumTest, използващи различни стойности на Day enum и извикване на метода tellItLikeItIs() за всеки.
ЗАБЕЛЕЖКА: Новата ключова дума се използва, защото EnumTest е обикновен клас, а не enum, така че създаваме екземпляри и предаваме стойността на enum на неговия конструктор.