Convertendo seqüências de caracteres em enums em Java
1. Introdução
Neste breve artigo, veremos como converter uma String em uma enumeração em Java rapidamente.
2. Configuração
Estamos lidando com o Java principal, portanto não precisamos adicionar artefatos adicionais. Vamos trabalhar comPizzaDeliveryStatusEnum do artigoenums guide.
3. A conversão
Enums são semelhantes às classes Java padrão e seus valores podem ser acessados usando a notação de ponto. Portanto, para acessar o valorREADY dePizzaDeliveryStatusEnum, faríamos:
PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;
Isso está bem, mas e se tivéssemos o valor do status armazenado comoString e quiséssemos convertê-lo emPizzaStatusEnum? A maneira ingênua de fazer isso seria escrever uma instruçãoswitch gigante retornando o valor correto deenum para cada um de seus valores possíveis. Mas escrever e manter esse código é um pesadelo e deve ser evitado a todo custo.
Por outro lado,the enum type provides a valueOf() method that takes a String as an argument and returns the corresponding enum object:
PizzaStatusEnum readyStatus = PizzaStatusEnum.valueOf("READY");
Podemos verificar se essa abordagem realmente funciona através de um teste de unidade:
@Test
public void whenConvertedIntoEnum_thenGetsConvertedCorrectly() {
String pizzaEnumValue = "READY";
PizzaStatusEnum pizzaStatusEnum
= PizzaStatusEnum.valueOf(pizzaEnumValue);
assertTrue(pizzaStatusEnum == PizzaStatusEnum.READY);
}
É importante lembrar que o métodovalueOf() faz uma correspondência com distinção entre maiúsculas e minúsculas do argumento fornecido a ele, portanto, passar um valor que não corresponde ao caso de nenhum dos valores originais deenum leva a umIllegalArgumentException:
@Test(expected = IllegalArgumentException.class)
public void whenConvertedIntoEnum_thenThrowsException() {
String pizzaEnumValue = "rEAdY";
PizzaStatusEnum pizzaStatusEnum
= PizzaStatusEnum.valueOf(pizzaEnumValue);
}
Passar um valor que não faz parte dos valores originais deenum também leva a umIllegalArgumentException:
@Test(expected = IllegalArgumentException.class)
public void whenConvertedIntoEnum_thenThrowsException() {
String pizzaEnumValue = "invalid";
PizzaStatusEnum pizzaStatusEnum = PizzaStatusEnum.valueOf(pizzaEnumValue);
}
4. Conclusão
Neste artigo rápido, vimos como converterString emenum.
É altamente recomendável usar o métodovalueOf() integrado do tipoenum, em vez de fazermos a conversão nós mesmos.
Como sempre, o código deste artigo pode ser encontradoover on GitHub.