Java enum は、固定の定数セットを表す強力なデータ型です。これらは通常、オブジェクトが取り得る特定の値セットの概要を説明するために使用されます。場合によっては、文字列の図を列挙値に変換したい場合があります。これに関連して、Java で文字列を列挙型に変換するためのさまざまな戦略を検討し、理解を深めるためにプログラム全体を提供します。
Java の Enum を理解する:
変換プロセスに入る前に、Java enum について簡単にまとめてみましょう。列挙型 (略して enum) は、定数値を表すより構造化された方法を提供するために Java 5 で導入されました。 enum 宣言は、その enum 型の変数が取ることができる固定の値のセットを定義します。 enum の各値は enum 定数と呼ばれます。
enum 宣言の例を次に示します。
public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
この場合、Day は列挙型の名前で、曜日を表す 7 つの定数があります。 Enum には追加のフィールドとメソッドを含めることもできるため、単純な定数値よりも柔軟で強力になります。
文字列を列挙型に変換する:
文字列表現を取得し、それを列挙型に変換したい場合は、要件に基づいてさまざまな戦術に従うことができます。ここでは、この変換を実行するための 3 つの一般的な方法、valueOf() メソッドの使用、カスタム マッピングの使用、および Enum.ValueOf() メソッドの使用について説明します。
方法 1: valueOf() メソッドを使用する
文字列を enum に直接変換する最大の方法は、enum 自体によって提供される valueOf() テクニックを使用することです。このアプローチでは、一貫した列挙型の名前を文字列として取得し、検出された場合は対応する正規の列挙型を返します。以下に例を示します。
StringToEnumExample.java
public class StringToEnumExample { public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { String dayString = 'FRIDAY'; Day day = Day.valueOf(dayString); System.out.println(day); // Output: FRIDAY } }
出力:
FRIDAY
この例では、valueOf() メソッドを呼び出して、文字列「FRIDAY」を Day 列挙型に変換します。結果は Day.FRIDAY 列挙定数となり、コンソールに出力されます。
valueOf() メソッドでは大文字と小文字が区別され、文字列がどの enum 定数にも一致しない場合は、java.lang.IllegalArgumentException がスローされることに注意することが重要です。これを処理するには、変換を try-catch ブロックでラップして、例外を適切に処理します。
方法 2: カスタム マッピングを使用する
場合によっては、文字列表現と列挙型定数の間でカスタム マッピングを実行する必要がある場合があります。この方法は、文字列値が enum 定数名と正確に一致しない場合に便利です。以下に例を示します。
StringToEnumExample.java
public class StringToEnumExample { // Define the Day enum with associated abbreviations public enum Day { MONDAY('Mon'), TUESDAY('Tue'), WEDNESDAY('Wed'), THURSDAY('Thu'), FRIDAY('Fri'), SATURDAY('Sat'), SUNDAY('Sun'); // Private field to store the abbreviation for each day private final String abbreviation; // Constructor to initialize the abbreviation for each enum constant Day(String abbreviation) { this.abbreviation = abbreviation; } // Getter method to retrieve the abbreviation for a specific day public String getAbbreviation() { return abbreviation; } // Custom method to convert an abbreviation string to the corresponding enum constant public static Day fromAbbreviation(String abbreviation) { for (Day day : Day.values()) { if (day.getAbbreviation().equalsIgnoreCase(abbreviation)) { return day; } } // If no match is found, throw an IllegalArgumentException throw new IllegalArgumentException('Invalid abbreviation: ' + abbreviation); } } public static void main(String[] args) { String dayString = 'Fri'; // Convert the abbreviation string to the corresponding Day enum constant Day day = Day.fromAbbreviation(dayString); System.out.println(day); // Output: FRIDAY } }
出力:
FRIDAY
この例では、Day 列挙型に、その日の短い文字列表現を表す略語と呼ばれる追加フィールドがあります。略語に基づいて変換を実行するカスタム メソッド fromAbbreviation() を定義します。略語がいずれかの enum 定数と一致する場合、対応する enum 定数が返されます。それ以外の場合は、例外がスローされます。
方法 3: Enum.valueOf() メソッドを使用する
3 番目の方法では、Enum.valueOf() メソッドを使用します。これは、文字列を enum 定数に変換するための汎用メソッドです。以下に例を示します。
StringToEnumExample.java
public class StringToEnumExample { // Define the Day enum with seven constants representing the days of the week public enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { // Define the string representation of the day String dayString = 'SUNDAY'; // Convert the string to the corresponding Day enum constant using Enum.valueOf() Day day = Enum.valueOf(Day.class, dayString); // Print the value of the day System.out.println(day); // Output: SUNDAY } }
出力:
SUNDAY
この例では、列挙型クラス (Day.class) と文字列表現 (dayString) を Enum.valueOf() メソッドに渡します。見つかった場合は対応する enum 定数を返し、一致するものが見つからなかった場合は IllegalArgumentException をスローします。
この記事では、Java で文字列を列挙型に変換するためのさまざまな方法を検討しました。 valueOf() メソッドの使用、カスタム マッピングの作成、Enum.valueOf() メソッドの利用について説明しました。要件に応じて、最も適切なアプローチを選択できます。 valueOf() メソッドを使用する場合は必ず例外を処理し、文字列値が enum 定数名と直接一致しない場合はカスタム マッピングを検討してください。