Javaで文字列を列挙型に変換する

Javaでの文字列から列挙への変換

1. 前書き

この短い記事では、Javaで文字列を列挙型にすばやく変換する方法を説明します。

2. セットアップ

コアJavaを扱っているため、追加の成果物を追加する必要はありません。 enums guideの記事のPizzaDeliveryStatusEnumを使用します。

3. 変換

Enumsは標準のJavaクラスに似ており、ドット表記を使用してそれらの値にアクセスできます。 したがって、PizzaDeliveryStatusEnumREADY値にアクセスするには、次のようにします。

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

これは問題ありませんが、ステータスの値をStringとして保存し、それをPizzaStatusEnumに変換したい場合はどうでしょうか。 これを行う素朴な方法は、可能な値ごとにenumの正しい値を返す巨大なswitchステートメントを作成することです。 しかし、そのようなコードを書いて維持することは悪夢であり、どんな場合でも避けるべきです。

一方、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");

このアプローチがユニットテストを通じて実際に機能することを確認できます:

@Test
public void whenConvertedIntoEnum_thenGetsConvertedCorrectly() {

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

valueOf()メソッドは、指定された引数の大文字と小文字を区別する一致を行うため、元のenumの値のいずれの場合とも一致しない値を渡すと、覚えておくことが重要です。 IllegalArgumentExceptionにつながる:

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

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

元のenumの値の一部ではない値を渡すと、IllegalArgumentExceptionにもなります。

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

4. 結論

この簡単な記事では、Stringenumに変換する方法を見ました。

自分で変換するのではなく、enumタイプの組み込みのvalueOf()メソッドを使用することを強くお勧めします。

いつものように、この記事のコードはover on GitHubにあります。