Рубрики
Без рубрики

Преобразование строк в перечисления в Java

Краткое и практическое руководство по преобразованию строк в перечисления в Java.

Автор оригинала: baeldung.

1. введение

В этой короткой статье мы увидим, как быстро преобразовать строку в перечисление в Java.

2. Настройка

Мы имеем дело с ядром Java, поэтому нам не нужно добавлять никаких дополнительных артефактов. Мы будем работать с перечислением статуса доставки пиццы из руководства по перечислениям статьи.

3. Преобразование

Перечисления аналогичны стандартным классам Java, и к их значениям можно получить доступ с помощью точечной нотации. Поэтому , чтобы получить доступ к READY значению Перечисления статуса доставки пиццы , мы бы сделали:

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

Это нормально, но что , если бы у нас было значение статуса, сохраненное в виде String , и мы хотели бы преобразовать его в PizzaStatusEnum ? Наивный способ сделать это-написать гигантский оператор switch , возвращающий правильное значение enum для каждого из его возможных значений. Но написание и поддержка такого кода-это кошмар, и его следует избегать любой ценой.

С другой стороны, тип enum предоставляет метод valueOf () , который принимает Строку в качестве аргумента и возвращает соответствующий объект enum :

PizzaStatusEnum readyStatus = PizzaStatusEnum.valueOf("READY");

Мы можем проверить, что этот подход действительно работает с помощью модульного теста:

@Test
public void whenConvertedIntoEnum_thenGetsConvertedCorrectly() {
 
    String pizzaEnumValue = "READY";
    PizzaStatusEnum pizzaStatusEnum
      = PizzaStatusEnum.valueOf(pizzaEnumValue);
    assertTrue(pizzaStatusEnum == PizzaStatusEnum.READY);
}

Важно помнить, что метод valueOf() сопоставляет предоставленный ему аргумент с учетом регистра, поэтому передача значения, которое не соответствует регистру любого из исходных значений enum , приведет к исключению IllegalArgumentException :

@Test(expected = IllegalArgumentException.class)
public void whenConvertedIntoEnum_thenThrowsException() {
    
    String pizzaEnumValue = "rEAdY";
    PizzaStatusEnum pizzaStatusEnum
      = PizzaStatusEnum.valueOf(pizzaEnumValue);
}

Передача значения, которое не является частью исходных значений enum , также приводит к исключению IllegalArgumentException :

@Test(expected = IllegalArgumentException.class)
public void whenConvertedIntoEnum_thenThrowsException() {
    String pizzaEnumValue = "invalid";
    PizzaStatusEnum pizzaStatusEnum = PizzaStatusEnum.valueOf(pizzaEnumValue);
}

4. Заключение

В этой краткой статье мы рассмотрели, как преобразовать Строку в перечисление .

Настоятельно рекомендуется использовать встроенное значение метода() типа enum вместо того, чтобы выполнять преобразование самостоятельно.

Как всегда, код для этой статьи можно найти на GitHub .