Java enum — це потужні типи даних, які представляють фіксований набір констант. Вони зазвичай використовуються для окреслення певного набору значень, які може приймати об’єкт. Іноді вам може знадобитися перетворити ілюстрацію рядка на значення enum. У цьому контексті ми досліджуватимемо різні стратегії перетворення рядка в перелік у Java, пропонуючи вам цілу програму для кращого розуміння.
Розуміння Enum в Java:
Перш ніж заглибитися в процес перетворення, давайте коротко повторимо Java enum. Перерахування, або скорочено enum, були введені в Java 5, щоб забезпечити більш структурований спосіб представлення постійних значень. Оголошення enum визначає фіксований набір значень, які може приймати змінна цього типу enum. Кожне значення в переліку називається константою переліку.
Ось приклад оголошення enum:
public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
У цьому випадку Day — це назва переліку, і воно має сім констант, що представляють дні тижня. Enum також може мати додаткові поля та методи, що робить їх більш гнучкими та потужними, ніж прості постійні значення.
Перетворення рядка в Enum:
Якщо у вас є рядкове представлення, і ви також хочете перетворити його на enum, ви можете застосувати різні тактики відповідно до ваших вимог. Тут ми розповімо про 3 загальні методи виконання цього перетворення: використання методу valueOf(), використання спеціального відображення та використання методу Enum.ValueOf().
Спосіб 1: Використання методу valueOf().
Максимальний прямий спосіб перетворити рядок на перелік — це використання методу valueOf(), наданого за допомогою самого переліку. Цей підхід приймає ім’я консистенції переліку як рядок і повертає відповідне регулярне перелічення, якщо воно виявлено. Ось приклад:
StringToEnumExample.java
public class StringToEnumExample { public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { String dayString = 'FRIDAY'; Day day = Day.valueOf(dayString); System.out.println(day); // Output: FRIDAY } }
Вихід:
FRIDAY
У цьому прикладі ми перетворюємо рядок «FRIDAY» на перелік Day за допомогою виклику методу valueOf(). Результатом є константа переліку Day.FRIDAY, яка потім друкується на консолі.
Важливо зауважити, що метод valueOf() чутливий до регістру, і якщо рядок не збігається з жодною константою enum, буде створено виняток java.lang.IllegalArgumentException. Щоб впоратися з цим, ви можете загорнути перетворення в блок try-catch, щоб витончено обробити виняток.
Спосіб 2. Використання спеціального зіставлення
У деяких випадках вам може знадобитися виконати настроюване зіставлення між рядковим представленням і константою enum. Цей підхід корисний, коли рядкові значення не відповідають іменам констант enum. Ось приклад:
StringToEnumExample.java
public class StringToEnumExample { // Define the Day enum with associated abbreviations public enum Day { MONDAY('Mon'), TUESDAY('Tue'), WEDNESDAY('Wed'), THURSDAY('Thu'), FRIDAY('Fri'), SATURDAY('Sat'), SUNDAY('Sun'); // Private field to store the abbreviation for each day private final String abbreviation; // Constructor to initialize the abbreviation for each enum constant Day(String abbreviation) { this.abbreviation = abbreviation; } // Getter method to retrieve the abbreviation for a specific day public String getAbbreviation() { return abbreviation; } // Custom method to convert an abbreviation string to the corresponding enum constant public static Day fromAbbreviation(String abbreviation) { for (Day day : Day.values()) { if (day.getAbbreviation().equalsIgnoreCase(abbreviation)) { return day; } } // If no match is found, throw an IllegalArgumentException throw new IllegalArgumentException('Invalid abbreviation: ' + abbreviation); } } public static void main(String[] args) { String dayString = 'Fri'; // Convert the abbreviation string to the corresponding Day enum constant Day day = Day.fromAbbreviation(dayString); System.out.println(day); // Output: FRIDAY } }
Вихід:
FRIDAY
У цьому прикладі перелік Day має додаткове поле під назвою abbreviation, яке представляє коротше рядкове представлення дня. Ми визначаємо спеціальний метод fromAbbreviation(), який виконує перетворення на основі абревіатури. Якщо абревіатура відповідає будь-якій константі enum, повертається відповідна константа enum; інакше створюється виняток.
Спосіб 3: Використання методу Enum.valueOf().
Третій метод передбачає використання методу Enum.valueOf(), який є методом загального призначення для перетворення рядків у константи enum. Ось приклад:
StringToEnumExample.java
public class StringToEnumExample { // Define the Day enum with seven constants representing the days of the week public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { // Define the string representation of the day String dayString = 'SUNDAY'; // Convert the string to the corresponding Day enum constant using Enum.valueOf() Day day = Enum.valueOf(Day.class, dayString); // Print the value of the day System.out.println(day); // Output: SUNDAY } }
Вихід:
SUNDAY
У цьому прикладі ми передаємо клас enum (Day.class) і рядкове представлення (dayString) до методу Enum.valueOf(). Він повертає відповідну константу enum, якщо її знайдено, або генерує виняток IllegalArgumentException, якщо відповідності не знайдено.
У цій статті ми досліджували різні методи перетворення рядка в перелік у Java. Ми обговорювали використання методу valueOf(), створення спеціального відображення та використання методу Enum.valueOf(). Залежно від ваших вимог ви можете вибрати найбільш підходящий підхід. Пам’ятайте про обробку винятків під час використання методу valueOf() і розгляньте спеціальне відображення, коли рядкові значення не збігаються безпосередньо з назвами констант enum.