Преобразование строк в перечисления в 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.