«1. Введение

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

2. Настройка

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

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

Перечисления похожи на стандартные классы Java, и доступ к их значениям можно получить с помощью записи через точку. Таким образом, чтобы получить доступ к ГОТОВОМУ значению PizzaDeliveryStatusEnum, мы должны сделать:

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

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

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

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

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

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

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

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

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

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

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

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

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

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