У Java перерахування (enum) є спеціальним типом, який використовується для визначення групи іменованих констант.
- Переліки допомагають підтримувати читабельність і безпеку типів у програмах, призначаючи значущі імена цілим значенням.
- Це особливо корисно, коли у нас є невеликий набір можливих значень для елемента, як-от дні тижня, маршрути тощо.
Створення 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. Оголошення поза класом
Як ми бачили в наведеному вище прикладі, переліки можна оголошувати поза класом і отримати прямий доступ
2. Оголошення всередині класу
Enum також можна оголошувати всередині класу, але не всередині методу.
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.
- Підтримка Switch: Може використовуватися в операторах switch.
- Неявні модифікатори: Константи є публічними статичними фінальними.
- Спадок: Enum не може розширювати класи, але може реалізовувати інтерфейси.
Enum у операторі Switch
Enum можна використовувати в операторах switch для обробки різних випадків на основі констант enum.
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
Enum з абстрактними методами
Переліки можуть оголошувати абстрактні методи, які має реалізувати кожна константа.
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
Ітерація Enum з використанням 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
Ми можемо поєднувати enum зі звичайними класами, щоб організувати логіку вашої програми. 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 як аргумент і призначає його.
- Клас має метод tellItLikeItIs(), який друкує повідомлення на основі значення дня.
- Основний метод включає об’єкти EnumTest, що використовують різні значення переліку Day і виклик методу tellItLikeItIs() для кожного.
ПРИМІТКА: Використовується ключове слово new, тому що EnumTest є звичайним класом, а не enum, тому ми створюємо екземпляри та передаємо значення enum його конструктору.