Convertendo seqüências de caracteres em enums em Java

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.