1. 序章

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

2. 設定

コアJavaを扱っているので、アーティファクトを追加する必要はありません。 enumsガイドの記事のPizzaDeliveryStatusEnumを使用します。

3. 変換

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

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

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

一方、列挙型は、引数として文字列を受け取り、対応する列挙オブジェクトを返すvalueOf()メソッドを提供します:

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

このアプローチが実際に単体テストで機能することを確認できます。

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

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

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

元の列挙型の値の一部ではない値を渡すと、IllegalArgumentExceptionも発生します。

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

4. 結論

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

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

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