1. Въведение
В тази кратка статия ще видим как бързо да конвертирате String в enum в Java.
2. Настройка
Имаме работа с основната Java, така че не е необходимо да добавяме допълнителни артефакти. Ще работим с PizzaDeliveryStatusEnum от статията с ръководството за изброяване .
3. Преобразуването
Enums са подобни на стандартните Java класове и техните стойности могат да бъдат достъпни с помощта на точковото обозначение. Така че, за да получим стойността READY на PizzaDeliveryStatusEnum , ще направим:
PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;
Това е добре, но какво, ако имахме стойността на състоянието, съхранено като String , и искахме да го преобразуваме в PizzaStatusEnum ? Наивният начин да направите това би бил да напишете гигантски оператор за превключване , връщащ правилната стойност на преброяването за всяка от възможните му стойности. Но писането и поддържането на такъв код е кошмар и трябва да се избягва на всяка цена.
От друга страна, на 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. Заключение
В тази бърза статия видяхме как да конвертираме String в enum .
Силно се препоръчва да използваме вградения метод valueOf () от типа enum , вместо да правим преобразуването сами.
Както винаги, кодът за тази статия може да бъде намерен в GitHub.