Робота з Enum у Java
Перейдемо до ще однієї доволі цікавої та, що найважливіше, особливої структури даних — enum.
Розглянемо створення enum. Створення enum суттєво відрізняється від інших структур даних, оскільки виконується на рівні класу:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Практичне застосування
Enum потрібен для зручного посилання на константу. Оскільки це перелік констант, доступ до них здійснюється наступним чином:
Main.java
123456789101112131415161718package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Тут ми просто звертаємося до константи enum, щоб визначити, який сьогодні день. Замість створення багатьох різних констант ми зберігаємо масив констант у enum. Це зручно та дуже практично. Наприклад, у одному з попередніх завдань можна було зберігати назви відділів у enum і використовувати константу як ключ.
Розглянемо приклад:
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }
Перетворення в масив
До речі, ви також можете отримати всі константи з enum у вигляді масиву за допомогою методу values().
Розглянемо приклад:
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Оголошення полів і методів у перерахуваннях (enum)
У перерахуваннях також можна оголошувати поля та методи.
Розглянемо приклад світлофора:
Main.java
12345678910111213enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
У перерахуваннях методи працюють дещо інакше. Оскільки це константи, їх не можна змінювати. Тому ми додаємо поля в конструктор цього enum, після чого визначаємо метод getAction(), який одразу повертає дію, яку потрібно виконати для конкретного сигналу світлофора. Як бачите, цю дію ми вказуємо безпосередньо в перерахуванні під час переліку констант.
Розглянемо приклад виклику такого методу:
Main.java
1234567891011121314151617181920212223package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Як видно, за допомогою методу getAction() ми одразу отримали дію, яку потрібно виконати для певного світлофора. Ви можете змінити RED на будь-який інший колір і подивитися, що станеться.
Методи та поля в перерахуваннях використовуються не так часто, але така функціональність існує, тому варто про це знати. Більше про enum можна прочитати в Офіційній документації Java
Переваги Enum у Java
- Покращена читабельність: заміна числових констант і рядкових літералів іменованими значеннями робить код більш зрозумілим;
- Типобезпечність: компілятор забезпечує типобезпечність при роботі з enum, що запобігає помилкам, пов'язаним із типами;
- Обмежений набір значень: enum надає фіксований набір значень, що робить код більш передбачуваним;
- Можливість додавати методи та поля: enum може містити методи та поля, що робить їх потужнішими порівняно зі звичайними перерахуваннями.
1. Що таке enum у Java?
2. Як оголосити enum з назвою Months, що представляє місяці року?
3. Як отримати масив усіх значень у enum з назвою Colors?
4. Яке з наступних тверджень щодо цього enum є правильним?
5. Як правильно порівняти currentStatus із Status.ACTIVE? Розгляньте наступний enum:
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Чудово!
Completion показник покращився до 4
Робота з Enum у Java
Свайпніть щоб показати меню
Перейдемо до ще однієї доволі цікавої та, що найважливіше, особливої структури даних — enum.
Розглянемо створення enum. Створення enum суттєво відрізняється від інших структур даних, оскільки виконується на рівні класу:
DaysOfTheWeek.java
123456789public enum DaysOfTheWeek { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Практичне застосування
Enum потрібен для зручного посилання на константу. Оскільки це перелік констант, доступ до них здійснюється наступним чином:
Main.java
123456789101112131415161718package com.example; public class Main { public static void main(String[] args) { Days today = Days.MONDAY; System.out.println(today); } } enum Days { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Тут ми просто звертаємося до константи enum, щоб визначити, який сьогодні день. Замість створення багатьох різних констант ми зберігаємо масив констант у enum. Це зручно та дуже практично. Наприклад, у одному з попередніх завдань можна було зберігати назви відділів у enum і використовувати константу як ключ.
Розглянемо приклад:
Main.java
12345678910111213141516171819202122232425262728293031323334353637package com.example; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { List<String> marketingEmployees = new ArrayList<>(); marketingEmployees.add("Michael"); marketingEmployees.add("Alice"); marketingEmployees.add("Jimmy"); List<String> developerEmployees = new ArrayList<>(); developerEmployees.add("Bob"); developerEmployees.add("John"); developerEmployees.add("Ryan"); List<String> analyticsEmployees = new ArrayList<>(); analyticsEmployees.add("Alexander"); analyticsEmployees.add("Ben"); Map<Departments, List<String>> company = new HashMap<>(); company.put(Departments.MARKETING, marketingEmployees); company.put(Departments.DEVELOPMENT, developerEmployees); company.put(Departments.ANALYTICS, analyticsEmployees); System.out.println("Company: " + company); } } enum Departments { MARKETING, DEVELOPMENT, ANALYTICS }
Перетворення в масив
До речі, ви також можете отримати всі константи з enum у вигляді масиву за допомогою методу values().
Розглянемо приклад:
Main.java
12345678910111213package com.example; public class Main { public static void main(String[] args) { Days[] array = Days.values(); Days monday = array[1]; System.out.println(monday); } } enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }
Оголошення полів і методів у перерахуваннях (enum)
У перерахуваннях також можна оголошувати поля та методи.
Розглянемо приклад світлофора:
Main.java
12345678910111213enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
У перерахуваннях методи працюють дещо інакше. Оскільки це константи, їх не можна змінювати. Тому ми додаємо поля в конструктор цього enum, після чого визначаємо метод getAction(), який одразу повертає дію, яку потрібно виконати для конкретного сигналу світлофора. Як бачите, цю дію ми вказуємо безпосередньо в перерахуванні під час переліку констант.
Розглянемо приклад виклику такого методу:
Main.java
1234567891011121314151617181920212223package com.example; public class Main { public static void main(String[] args) { TrafficLight currentLight = TrafficLight.RED; String currentAction = currentLight.getAction(); System.out.println("Action: " + currentAction); } } enum TrafficLight { RED("Stop"), YELLOW("Slow down"), GREEN("Go"); private final String action; TrafficLight(String action) { this.action = action; } public String getAction() { return action; } }
Як видно, за допомогою методу getAction() ми одразу отримали дію, яку потрібно виконати для певного світлофора. Ви можете змінити RED на будь-який інший колір і подивитися, що станеться.
Методи та поля в перерахуваннях використовуються не так часто, але така функціональність існує, тому варто про це знати. Більше про enum можна прочитати в Офіційній документації Java
Переваги Enum у Java
- Покращена читабельність: заміна числових констант і рядкових літералів іменованими значеннями робить код більш зрозумілим;
- Типобезпечність: компілятор забезпечує типобезпечність при роботі з enum, що запобігає помилкам, пов'язаним із типами;
- Обмежений набір значень: enum надає фіксований набір значень, що робить код більш передбачуваним;
- Можливість додавати методи та поля: enum може містити методи та поля, що робить їх потужнішими порівняно зі звичайними перерахуваннями.
1. Що таке enum у Java?
2. Як оголосити enum з назвою Months, що представляє місяці року?
3. Як отримати масив усіх значень у enum з назвою Colors?
4. Яке з наступних тверджень щодо цього enum є правильним?
5. Як правильно порівняти currentStatus із Status.ACTIVE? Розгляньте наступний enum:
Дякуємо за ваш відгук!