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 .