Java enum sú výkonné dátové typy, ktoré predstavujú pevnú množinu konštánt. Bežne sa používajú na načrtnutie špecifického súboru hodnôt, ktoré môže objekt nadobudnúť. Niekedy možno budete chcieť previesť ilustráciu reťazca na hodnotu enum. V tejto súvislosti preskúmame rôzne stratégie na konverziu reťazca na enum v jazyku Java a ponúkneme vám celý program na lepšie pochopenie.
Pochopenie Enum v Jave:
Predtým, ako sa ponoríme do procesu konverzie, stručne zopakujme zoznam Java. Enumerácie alebo skrátene enum boli zavedené v Java 5, aby poskytli štruktúrovanejší spôsob reprezentácie konštantných hodnôt. Deklarácia enum definuje pevnú množinu hodnôt, ktoré môže nadobudnúť premenná tohto typu enum. Každá hodnota v enume sa nazýva enum konštanta.
Tu je príklad deklarácie enum:
public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
V tomto prípade je deň názov enum a má sedem konštánt reprezentujúcich dni v týždni. Enum môže mať aj ďalšie polia a metódy, vďaka čomu sú flexibilnejšie a výkonnejšie ako jednoduché konštantné hodnoty.
Konverzia reťazca na Enum:
Keď máte reprezentáciu reťazca a tiež ju chcete previesť na enum, môžete použiť rôzne taktiky podľa vašich požiadaviek. Tu budeme hovoriť o 3 bežných metódach vykonania tejto konverzie: použitie metódy valueOf(), použitie vlastného mapovania a použitie metódy Enum.ValueOf().
Metóda 1: Použitie metódy valueOf().
Maximálny priamy spôsob konverzie reťazca na enum je pomocou použitia techniky valueOf() poskytnutej prostredníctvom samotného enum. Tento prístup berie názov výčtu konzistentný ako reťazec a v prípade zistenia vráti zodpovedajúci výčtový riadok. Tu je prí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ýkon:
FRIDAY
V tomto príklade skonvertujeme reťazec 'FRIDAY' na denný zoznam volaním metódy valueOf(). Výsledkom je enum konštanta Day.FRIDAY, ktorá sa potom vytlačí do konzoly.
Je dôležité poznamenať, že metóda valueOf() rozlišuje veľké a malé písmená a ak sa reťazec nezhoduje so žiadnou konštantou enum, vyvolá sa výnimka java.lang.IllegalArgumentException. Aby ste to zvládli, môžete konverziu zabaliť do bloku try-catch, aby ste výnimku zvládli elegantne.
Metóda 2: Použitie vlastného mapovania
V niektorých prípadoch možno budete musieť vykonať vlastné mapovanie medzi reprezentáciou reťazca a konštantou enum. Tento prístup je užitočný, keď sa hodnoty reťazcov presne nezhodujú s menami enumových konštánt. Tu je prí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ýkon:
FRIDAY
V tomto príklade má Enum Day ďalšie pole s názvom skratka, ktorá predstavuje kratší reťazec reprezentujúci deň. Definujeme vlastnú metódu fromAbbreviation(), ktorá vykoná konverziu na základe skratky. Ak sa skratka zhoduje s niektorou enum konštantou, vráti sa zodpovedajúca enum konštanta; inak sa vyvolá výnimka.
Metóda 3: Použitie metódy Enum.valueOf().
Tretia metóda zahŕňa použitie metódy Enum.valueOf(), čo je univerzálna metóda na konverziu reťazcov na konštanty enum. Tu je prí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ýkon:
SUNDAY
V tomto príklade odovzdáme triedu enum (Day.class) a reprezentáciu reťazca (dayString) metóde Enum.valueOf(). Ak sa nájde, vráti zodpovedajúcu konštantu enum, alebo ak sa nenájde žiadna zhoda, vyvolá výnimku IllegalArgumentException.
V tomto článku sme preskúmali rôzne metódy prevodu reťazca na enum v jazyku Java. Diskutovali sme o použití metódy valueOf(), vytvorení vlastného mapovania a využití metódy Enum.valueOf(). V závislosti od vašich požiadaviek si môžete zvoliť najvhodnejší prístup. Nezabudnite zaobchádzať s výnimkami pri použití metódy valueOf() a zvážte vlastné mapovanie, keď sa hodnoty reťazcov nezhodujú priamo s menami enum konštanty.