Konvertieren von Strings in Enums in Java

1. Einleitung

In diesem kurzen Artikel erfahren Sie, wie Sie einen String in Java schnell in eine Aufzählung konvertieren können.

2. Setup

Wir haben es mit Kern-Java zu tun, sodass wir keine zusätzlichen Artefakte hinzufügen müssen. Wir werden mit dem PizzaDeliveryStatusEnum aus dem Artikel des Enums-Leitfadens arbeiten.

3. Die Konvertierung

Aufzählungen ähneln Standard-Java-Klassen, und auf ihre Werte kann mit der Punktnotation zugegriffen werden. Um auf den READY- Wert von PizzaDeliveryStatusEnum zuzugreifen , gehen wir wie folgt vor :

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

Das ist in Ordnung, aber was wäre, wenn wir den Wert des Status als String gespeichert hätten und ihn in ein PizzaStatusEnum konvertieren wollten ? Der naive Weg, dies zu tun, wäre, eine riesige switch- Anweisung zu schreiben , die den korrekten Wert der Aufzählung für jeden ihrer möglichen Werte zurückgibt . Das Schreiben und Verwalten eines solchen Codes ist jedoch ein Albtraum und sollte unter allen Umständen vermieden werden.

Andererseits stellt der Aufzählungstyp eine valueOf () -Methode bereit , die einen String als Argument verwendet und das entsprechende Aufzählungsobjekt zurückgibt :

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

Wir können überprüfen, ob dieser Ansatz tatsächlich durch einen Komponententest funktioniert:

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

Es ist wichtig zu beachten, dass die valueOf () -Methode eine Groß- und Kleinschreibung des angegebenen Arguments ausführt. Wenn Sie also einen Wert übergeben, der nicht mit dem Fall eines der Werte der ursprünglichen Aufzählung übereinstimmt, führt dies zu einer IllegalArgumentException :

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

Passing einen Wert, der nicht Teil des ursprünglichen ist Enum ‚s Werte auch führt zu einer Illegal :

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

4. Fazit

In diesem kurzen Artikel haben wir gesehen, wie man einen String in eine Aufzählung konvertiert .

Es wird dringend empfohlen, die integrierte Methode valueOf () vom Typ enum zu verwenden, anstatt die Konvertierung selbst durchzuführen .

Wie immer finden Sie den Code für diesen Artikel auf GitHub.