Konvertieren von Strings in Enums in Java

Konvertieren von Strings in Enums in Java

1. Einführung

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

2. Konfiguration

Wir haben es mit Kern-Java zu tun, sodass wir keine zusätzlichen Artefakte hinzufügen müssen. Wir werden mit denPizzaDeliveryStatusEnum aus dem Artikelenums guide arbeiten.

3. Die Umwandlung

Enums ähneln Standard-Java-Klassen, und auf ihre Werte kann mit der Punktnotation zugegriffen werden. Um auf denREADY-Wert vonPizzaDeliveryStatusEnum zuzugreifen, würden wir Folgendes tun:

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

Das ist in Ordnung, aber was wäre, wenn wir den Wert des Status alsString gespeichert hätten und ihn inPizzaStatusEnum konvertieren wollten? Der naive Weg, dies zu tun, wäre, eine riesigeswitch-Anweisung zu schreiben, die den korrekten Wert vonenum für jeden seiner 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 istthe enum type provides a valueOf() method that takes a String as an argument and returns the corresponding enum object:

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

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

@Test
public void whenConvertedIntoEnum_thenGetsConvertedCorrectly() {

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

Es ist wichtig, sich daran zu erinnern, dass die MethodevalueOf()eine Groß- und Kleinschreibung des angegebenen Arguments durchführt, sodass ein Wert übergeben wird, der nicht mit dem Fall eines der ursprünglichen Werte vonenumübereinstimmt führen zu einemIllegalArgumentException:

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

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

Das Übergeben eines Werts, der nicht Teil der ursprünglichen Werte vonenumist, führt auch zuIllegalArgumentException:

@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 einString in einenum konvertiert.

Es wird dringend empfohlen, die integrierte MethodevalueOf()vom Typenumzu verwenden, anstatt die Konvertierung selbst durchzuführen.

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