Conversion de chaînes en enums en Java

Conversion de chaînes en enums en Java

1. introduction

Dans ce court article, nous verrons comment convertir rapidement une chaîne en une énumération en Java.

2. Installer

Nous traitons avec le noyau Java, nous n'avons donc pas besoin d'ajouter d'artefacts supplémentaires. Nous travaillerons avec lesPizzaDeliveryStatusEnum de l'articleenums guide.

3. La conversion

LesEnums sont similaires aux classes Java standard et leurs valeurs sont accessibles en utilisant la notation par points. Donc, pour accéder à la valeurREADY dePizzaDeliveryStatusEnum, nous ferions:

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

C'est bien, mais que se passerait-il si nous avions la valeur de l'état stockée en tant queString, et voulions la convertir enPizzaStatusEnum? La façon naïve de faire cela serait d'écrire une instructionswitch géante retournant la valeur correcte desenum pour chacune de ses valeurs possibles. Mais écrire et maintenir un tel code est un cauchemar et doit être évité à tout prix.

D'autre part,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");

Nous pouvons vérifier que cette approche fonctionne réellement à travers un test unitaire:

@Test
public void whenConvertedIntoEnum_thenGetsConvertedCorrectly() {

    String pizzaEnumValue = "READY";
    PizzaStatusEnum pizzaStatusEnum
      = PizzaStatusEnum.valueOf(pizzaEnumValue);
    assertTrue(pizzaStatusEnum == PizzaStatusEnum.READY);
}

Il est important de se rappeler que la méthodevalueOf() fait une correspondance sensible à la casse de l'argument qui lui est fourni, donc passer une valeur qui ne correspond à la casse d'aucune des valeurs originales deenum serait conduire à unIllegalArgumentException:

@Test(expected = IllegalArgumentException.class)
public void whenConvertedIntoEnum_thenThrowsException() {

    String pizzaEnumValue = "rEAdY";
    PizzaStatusEnum pizzaStatusEnum
      = PizzaStatusEnum.valueOf(pizzaEnumValue);
}

La transmission d'une valeur qui ne fait pas partie des valeurs originales deenum conduit également à unIllegalArgumentException:

@Test(expected = IllegalArgumentException.class)
public void whenConvertedIntoEnum_thenThrowsException() {
    String pizzaEnumValue = "invalid";
    PizzaStatusEnum pizzaStatusEnum = PizzaStatusEnum.valueOf(pizzaEnumValue);
}

4. Conclusion

Dans cet article rapide, nous avons vu comment convertir unString en unenum.

Il est fortement recommandé d’utiliser la méthode intégréevalueOf() du typeenum, au lieu d’effectuer la conversion nous-mêmes.

Comme toujours, le code de cet article se trouveover on GitHub.