enum на Java
У 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.
Java import 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 з методами та конструктором
Переліки можуть мати конструктори та методи, що виконуються окремо для кожної константи
Java enum 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 з абстрактними методами
Переліки можуть оголошувати абстрактні методи, які має реалізувати кожна константа.
Java enum 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.
Java enum 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.
Java import 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 його конструктору.