Conversione di stringhe in enumerazioni in Java

1. Introduzione

In questo breve articolo, vedremo come convertire rapidamente una stringa in un'enumerazione in Java.

2. Configurazione

Abbiamo a che fare con Java core, quindi non è necessario aggiungere ulteriori artefatti. Lavoreremo con PizzaDeliveryStatusEnum dall'articolo della guida alle enumerazioni.

3. La conversione

Le enumerazioni sono simili alle classi Java standard e ai loro valori è possibile accedere utilizzando la notazione punto. Quindi per accedere al valore READY di PizzaDeliveryStatusEnum , dovremmo:

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

Questo va bene, ma cosa succederebbe se avessimo il valore dello stato memorizzato come String e volessimo convertirlo in PizzaStatusEnum ? Il modo ingenuo di fare questo sarebbe di scrivere un gigante interruttore dichiarazione restituire il valore corretto del enum per ciascuno dei suoi possibili valori. Ma scrivere e mantenere tale codice è un incubo e dovrebbe essere evitato a tutti i costi.

D'altra parte, il tipo enum fornisce un metodo valueOf () che accetta una stringa come argomento e restituisce l' oggetto enum corrispondente :

PizzaStatusEnum readyStatus = PizzaStatusEnum.valueOf("READY");

Possiamo verificare che questo approccio funzioni effettivamente attraverso uno unit test:

@Test public void whenConvertedIntoEnum_thenGetsConvertedCorrectly() { String pizzaEnumValue = "READY"; PizzaStatusEnum pizzaStatusEnum = PizzaStatusEnum.valueOf(pizzaEnumValue); assertTrue(pizzaStatusEnum == PizzaStatusEnum.READY); }

E 'importante ricordare che il valueOf () metodo non una corrispondenza tra maiuscole e minuscole dell'argomento in dotazione ad esso, quindi il superamento di un valore che non corrisponde al caso di qualsiasi dell'originale enum 's valori porterebbe a un IllegalArgumentException :

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

Il passaggio di un valore che non è una parte dell'originale enum 's valori porta anche a un IllegalArgumentException :

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

4. Conclusione

In questo rapido articolo, abbiamo visto come convertire una stringa in un'enumerazione .

Si consiglia vivamente di utilizzare il metodo predefinito valueOf () del tipo enum , invece di eseguire noi stessi la conversione.

Come sempre, il codice per questo articolo può essere trovato su GitHub.