カテゴリ: Java 更新日: 2026/03/02

JavaのEnumクラスのvalueOfメソッドを完全解説!初心者でもわかる文字列から列挙型への変換

EnumのvalueOfメソッド
EnumのvalueOfメソッド

先生と生徒の会話形式で理解しよう

生徒

「先生、Javaで文字列から列挙型の定数に変換する方法ってありますか?」

先生

「はい、ありますよ。Javaのjava.lang.EnumクラスにはvalueOfというメソッドが用意されていて、文字列から対応する列挙定数を取得できます。」

生徒

「それなら、データベースやファイルから読み込んだ文字列を列挙型に変換して扱えるんですね?」

先生

「その通りです。valueOfメソッドを使うととても効率的に列挙型を扱えるようになります。詳しく見ていきましょう。」

1. java.langパッケージとEnumクラス

「1. java.langパッケージとEnumクラス」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

1. java.langパッケージとEnumクラス
1. java.langパッケージとEnumクラス

Javaのjava.langパッケージには、プログラムを書く上で欠かせない基本クラスが揃っています。列挙型の基盤となるEnumクラスもこの中に含まれています。列挙型を宣言すると自動的にEnumを継承し、その結果nameordinaltoString、そして今回解説するvalueOfといった便利なメソッドを自然に使えるようになります。

2. valueOfメソッドとは?

2. valueOfメソッドとは?
2. valueOfメソッドとは?

valueOfメソッドは、文字列を列挙型の定数に変換するためのメソッドです。構文は以下のようになります。

EnumType.valueOf(String name)

ここで指定する文字列は、列挙型で定義された定数名と完全に一致している必要があります。一致しない場合はIllegalArgumentExceptionが発生するので注意しましょう。

3. 基本的な使い方

3. 基本的な使い方
3. 基本的な使い方

曜日を表す列挙型を定義し、文字列から列挙定数に変換する例を見てみましょう。


enum Day {
    MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}

public class EnumValueOfExample {
    public static void main(String[] args) {
        Day day = Day.valueOf("FRIDAY");
        System.out.println(day);
    }
}

FRIDAY

この例では文字列「FRIDAY」が対応する列挙定数Day.FRIDAYに変換されて出力されます。

4. 存在しない定数を指定した場合

「4. 存在しない定数を指定した場合」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

4. 存在しない定数を指定した場合
4. 存在しない定数を指定した場合

valueOfは指定した文字列が列挙定数に存在しない場合、例外をスローします。そのため、外部入力を扱うときには特に注意が必要です。


public class ValueOfErrorExample {
    public static void main(String[] args) {
        try {
            Day day = Day.valueOf("HOLIDAY");
            System.out.println(day);
        } catch (IllegalArgumentException e) {
            System.out.println("指定した文字列は定義されていません。");
        }
    }
}

指定した文字列は定義されていません。

このように、例外処理を組み合わせることで安全に利用できます。

5. 実用的な活用例

5. 実用的な活用例
5. 実用的な活用例

実際の開発では、ユーザーの入力や外部ファイルから読み込んだデータを列挙型に変換して使う場面がよくあります。例えば注文状態を文字列で受け取り、列挙型で処理を分岐させる例です。


enum OrderStatus {
    NEW, PROCESSING, SHIPPED, DELIVERED
}

public class OrderExample {
    public static void main(String[] args) {
        String input = "SHIPPED";
        OrderStatus status = OrderStatus.valueOf(input);
        if (status == OrderStatus.SHIPPED) {
            System.out.println("注文は発送済みです。");
        }
    }
}

注文は発送済みです。

このように、文字列を直接判定するよりも列挙型に変換して扱う方がコードが安全で読みやすくなります。

6. nameメソッドとの組み合わせ

6. nameメソッドとの組み合わせ
6. nameメソッドとの組み合わせ

nameメソッドとvalueOfを組み合わせると、列挙型を文字列に変換し、再び列挙型に戻すことができます。これはデータ保存や通信処理で非常に役立ちます。


public class NameValueOfExample {
    public static void main(String[] args) {
        Day original = Day.MONDAY;
        String name = original.name();
        Day restored = Day.valueOf(name);
        System.out.println("元の定数: " + original);
        System.out.println("復元した定数: " + restored);
    }
}

元の定数: MONDAY
復元した定数: MONDAY

このように、文字列として保存し必要に応じて復元できるのがvalueOfの大きな強みです。

7. 初心者が押さえておくべきポイント

「7. 初心者が押さえておくべきポイント」の重要ポイントを、初心者の方にも分かりやすく簡潔に解説します。

7. 初心者が押さえておくべきポイント
7. 初心者が押さえておくべきポイント

初心者がvalueOfを理解するために大切な点を整理します。

  • 文字列から列挙型定数を取得できる便利なメソッドである。
  • 文字列は定数名と完全一致が必要である。
  • 存在しない文字列を指定すると例外が発生するため例外処理が重要である。
  • nameメソッドと組み合わせるとデータの保存や復元に活用できる。

これらを理解すれば、列挙型を使ったJavaプログラミングがより実践的で柔軟になります。

カテゴリの一覧へ
新着記事
New1
Java
JavaのStreamのreduceを完全解説!初心者でもわかる集約処理の基本
新規投稿
New2
Spring
Javaの@withinアノテーションを初心者向けに解説!Spring AOPでの使い方を完全ガイド
更新記事
New3
Spring
Springの@AfterThrowingアノテーションの使い方を完全ガイド!初心者でもわかる例外処理
更新記事
New4
Spring
Javaの@AfterReturningアノテーションの使い方を完全ガイド!初心者でもわかるAOP入門
更新記事
人気記事
No.1
Java&Spring記事人気No1
Spring
Spring BootとJavaの互換性一覧!3.5/3.4/3.3はJava 21・17に対応してる?
No.2
Java&Spring記事人気No2
Thymeleaf
Thymeleafのth:checkedの使い方!チェックボックスON/OFFを動的に制御する方法
No.3
Java&Spring記事人気No3
Thymeleaf
Thymeleaf(タイムリーフ)の使い方入門!初心者でもわかるth:textの基礎
No.4
Java&Spring記事人気No4
Java
Javaの抽象クラス(abstract)を完全ガイド!継承と設計のルールを学ぶ
No.5
Java&Spring記事人気No5
Spring
Spring BootのMultipartFile入門:ファイルアップロード・ダウンロードの実装方法と制限設定
No.6
Java&Spring記事人気No6
Spring
Thymeleaf(タイムリーフ)入門!初心者でもわかるSpring Bootとテンプレートエンジンの使い方
No.7
Java&Spring記事人気No7
Spring
SpringのBindingResultを完全ガイド!初心者でもわかる入力チェックとエラー処理
No.8
Java&Spring記事人気No8
Thymeleaf
Thymeleafのth:blockの使い方を完全ガイド!初心者でもわかるテンプレートブロック管理