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

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

1. Вступление

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

2. Настроить

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

3. Конверсия

Enums похожи на стандартные классы Java, и к их значениям можно получить доступ, используя точечную нотацию. Итак, чтобы получить доступ к значениюREADY дляPizzaDeliveryStatusEnum, мы должны сделать:

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

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

С другой стороны,the enum type provides a valueOf() method that takes a String as an argument and returns the corresponding enum object:

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. Заключение

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

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

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