«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.