1前書き

この短い記事では、JavaでStringをenumに素早く変換する方法を説明します。


2セットアップ

私たちはコアJavaを扱っているので、追加の成果物を追加する必要はありません。リンクから/PizzaDeliveryStatusEnum__を操作します。


3変換


Enums

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

PizzaDeliveryStatusEnum



READY

値にアクセスするには、次のようにします。

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

これで問題はありませんが、statusの値を

String

として格納し、それを

PizzaStatusEnum

に変換したい場合はどうすればよいですか。これを行う単純な方法は、可能な各値について正しいenumの値を返す巨大なswitchステートメントを書くことです。しかし、そのようなコードを書いて保守することは悪夢であり、絶対に避けなければなりません。

一方、

enum

型は引数として

String

を取り、対応する

enum

オブジェクトを返す

valueOf()

メソッドを提供します。

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結論

この簡単な記事では、

String



enum

に変換する方法を説明しました。

変換を自分で行うのではなく、

enum

タイプの組み込みの

valueOf()

メソッドを使用することを強くお勧めします。

いつものように、この記事のコードはhttps://github.com/eugenp/tutorials/tree/master/java-strings[over on GitHub]にあります。