Javaでの文字列から列挙体への変換
1. 序章
この短い記事では、Javaで文字列を列挙型にすばやく変換する方法を説明します。
2. 設定
コアJavaを扱っているので、アーティファクトを追加する必要はありません。 enumsガイドの記事のPizzaDeliveryStatusEnumを使用します。
3. 変換
Enums は標準のJavaクラスに似ており、ドット表記を使用してそれらの値にアクセスできます。 したがって、PizzaDeliveryStatusEnumのREADY値にアクセスするには、次のようにします。
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()メソッドは、指定された引数の大文字と小文字を区別して一致するため、元の
@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. 結論
この簡単な記事では、Stringをenumに変換する方法を説明しました。
自分で変換するのではなく、 enumタイプの組み込みのvalueOf()メソッドを使用することを強くお勧めします。
いつものように、この記事のコードはGitHubのにあります。