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 .