Javaで文字列を列挙型に変換する
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]にあります。