logo

Jak převést řetězec na Enum v Javě?

Java enum jsou výkonné datové typy, které představují pevnou sadu konstant. Běžně se používají k nastínění konkrétní sady hodnot, které může objekt nabývat. Někdy můžete chtít převést ilustraci řetězce na hodnotu výčtu. V této souvislosti prozkoumáme různé strategie převodu řetězce na enum v Javě a nabídneme vám celý program pro lepší pochopení.

Porozumění Enum v Javě:

Než se ponoříme do procesu převodu, pojďme si krátce zrekapitulovat Java enum. Výčty, nebo zkráceně enum, byly zavedeny v Javě 5, aby poskytly strukturovanější způsob reprezentace konstantních hodnot. Deklarace výčtu definuje pevnou sadu hodnot, které může proměnná tohoto výčtového typu nabývat. Každá hodnota ve výčtu se nazývá výčtová konstanta.

Zde je příklad deklarace výčtu:

 public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } 

V tomto případě je den název výčtu a má sedm konstant představujících dny v týdnu. Enum může mít také další pole a metody, díky čemuž jsou flexibilnější a výkonnější než jednoduché konstantní hodnoty.

Převod řetězce na Enum:

Když máte reprezentaci řetězce a také ji chcete převést na enum, můžete použít různé taktiky na základě vašich požadavků. Zde budeme hovořit o 3 běžných metodách provádění této konverze: použití metody valueOf(), použití vlastního mapování a použití metody Enum.ValueOf().

Metoda 1: Použití metody valueOf().

Maximální přímý způsob, jak převést řetězec na výčet, je pomocí použití techniky valueOf() poskytnuté prostřednictvím samotného výčtu. Tento přístup převezme název konzistentního výčtu jako řetězec a v případě zjištění vrátí odpovídající výčet regulární. Zde je příklad:

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 } } 

Výstup:

 FRIDAY 

V tomto příkladu převedeme řetězec 'FRIDAY' na výčet Day voláním metody valueOf(). Výsledkem je výčtová konstanta Day.FRIDAY, která je poté vytištěna na konzoli.

Je důležité poznamenat, že metoda valueOf() rozlišuje velká a malá písmena, a pokud řetězec neodpovídá žádné konstantě výčtu, bude vyvolána výjimka java.lang.IllegalArgumentException. Chcete-li to zvládnout, můžete převod zabalit do bloku try-catch, abyste výjimku zpracovali elegantně.

Metoda 2: Použití vlastního mapování

V některých případech může být nutné provést vlastní mapování mezi řetězcovou reprezentací a konstantou enum. Tento přístup je užitečný, když hodnoty řetězce přesně neodpovídají názvům konstant výčtu. Zde je příklad:

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 } } 

Výstup:

 FRIDAY 

V tomto příkladu má výčet Day další pole nazvané zkratka, která představuje kratší řetězec reprezentace dne. Definujeme vlastní metodu fromAbbreviation(), která provádí převod na základě zkratky. Pokud se zkratka shoduje s některou konstantou výčtu, vrátí se odpovídající konstanta výčtu; jinak je vyvolána výjimka.

Metoda 3: Použití metody Enum.valueOf().

Třetí metoda zahrnuje použití metody Enum.valueOf(), což je univerzální metoda pro převod řetězců na konstanty výčtu. Zde je příklad:

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 } } 

Výstup:

 SUNDAY 

V tomto příkladu předáme výčtovou třídu (Day.class) a řetězcovou reprezentaci (dayString) metodě Enum.valueOf(). Vrátí odpovídající konstantu výčtu, pokud je nalezena, nebo vyvolá výjimku IllegalArgumentException, pokud není nalezena žádná shoda.

V tomto článku jsme prozkoumali různé metody převodu řetězce na enum v Javě. Diskutovali jsme o použití metody valueOf(), vytvoření vlastního mapování a použití metody Enum.valueOf(). V závislosti na vašich požadavcích si můžete vybrat nejvhodnější přístup. Nezapomeňte zpracovat výjimky při použití metody valueOf() a zvažte vlastní mapování, když hodnoty řetězce přímo neodpovídají názvům konstant výčtu.