Перейти к основному содержимому

Преобразование строк в перечисления в Java

· 2 мин. чтения

Задача: Сумма двух чисел

Напишите функцию twoSum. Которая получает массив целых чисел nums и целую сумму target, а возвращает индексы двух чисел, сумма которых равна target. Любой набор входных данных имеет ровно одно решение, и вы не можете использовать один и тот же элемент дважды. Ответ можно возвращать в любом порядке...

ANDROMEDA

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 .