Javaでの文字列から列挙への変換
1. 前書き
この短い記事では、Javaで文字列を列挙型にすばやく変換する方法を説明します。
2. セットアップ
コアJavaを扱っているため、追加の成果物を追加する必要はありません。 enums guideの記事のPizzaDeliveryStatusEnumを使用します。
3. 変換
Enumsは標準のJavaクラスに似ており、ドット表記を使用してそれらの値にアクセスできます。 したがって、PizzaDeliveryStatusEnumのREADY値にアクセスするには、次のようにします。
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. 結論
この簡単な記事では、Stringをenumに変換する方法を見ました。
自分で変換するのではなく、enumタイプの組み込みのvalueOf()メソッドを使用することを強くお勧めします。
いつものように、この記事のコードはover on GitHubにあります。