1. Введение
В этом коротком руководстве мы узнаем, как быстро преобразовать строку в перечисление в Java.
2. Настройка
Мы имеем дело с ядром Java, поэтому нам не нужно добавлять какие-либо дополнительные артефакты. Мы также будем работать с PizzaDeliveryStatusEnum
из статьи руководства по перечислениям .
3. Преобразование
Перечисления
похожи на стандартные классы Java, и мы можем получить доступ к их значениям, используя запись через точку. Таким образом, чтобы получить доступ к ГОТОВОМУ
значению PizzaDeliveryStatusEnum
, мы должны использовать:
PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;
Это хорошо, но что, если бы у нас было значение статуса, сохраненное как String
, и мы хотели бы преобразовать его в 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 .