Робота з 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:
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
What is the syntax for creating an enum in Java?
Can you show an example of how to use enums in a Java program?
What are some common use cases for enums in Java?
Чудово!
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:
Дякуємо за ваш відгук!