Java列挙型の基本

JavaJavaBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Java における列挙型について学びます。列挙型は、Java の特殊なデータ型で、固定された定数のセットを定義することができます。Java で列挙型を作成、使用、および操作する方法を学びます。

列挙型の作成

  1. ~/project ディレクトリに StudentResult.java という名前の新しいファイルを作成します。
  2. 以下のコードを追加して、StudentResult という名前の列挙型を作成します。
public enum StudentResult {
    PASS,
    FAIL,
    ABSENT
}

列挙型の使用

  1. ~/project ディレクトリに Demo.java という名前の新しいファイルを作成します。
  2. 以下のコードを追加して、StudentResult 列挙型の変数を作成してその値を使用します。
public class Demo {
    public static void main(String[] args) {
        StudentResult result1 = StudentResult.ABSENT;
        StudentResult result2 = StudentResult.FAIL;
        StudentResult result3 = StudentResult.PASS;

        System.out.println(result1);
        System.out.println(result2);
        System.out.println(result3);
    }
}
  1. ターミナルで以下のコマンドを使用してコードを実行します。
javac Demo.java && java Demo

if-else文で列挙型を使用する

  1. 以下のコードを追加して、if-else文で StudentResult 列挙型を使用します。
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        if(result == StudentResult.ABSENT)
            System.out.println("The student was absent for the exam.");

        else if(result == StudentResult.PASS)
            System.out.println("The student passed the exam.");

        else if(result == StudentResult.FAIL)
            System.out.println("The student failed the exam.");
    }
}

switch文で列挙型を使用する

  1. 以下のコードを追加して、switch文で StudentResult 列挙型を使用します。
public class Demo {
    public static void main(String[] args) {
        StudentResult result = StudentResult.FAIL;

        switch(result) {
            case ABSENT : System.out.println("The Student was absent for the exam.");
            break;

            case PASS : System.out.println("The Student passed the exam.");
            break;

            case FAIL : System.out.println("The Student failed the exam.");
            break;
        }
    }
}

列挙型を反復処理する

  1. 以下のコードを追加して、StudentResult 列挙型を反復処理します。
public class Demo {
    public static void main(String[] args) {
        StudentResult[] resultArr = StudentResult.values();

        for(StudentResult sr : resultArr) {
            System.out.println(sr + " at index " + sr.ordinal());
        }
    }
}

列挙型のtoString()メソッドの使用

  1. 列挙型の toString() メソッドを使用するために以下のコードを追加します。
public class Demo {
    public static void main(String[] args) {
        for(StudentResult sr : StudentResult.values()) {
            String resultStr = sr.toString();
            System.out.println("大文字: " + resultStr);
            System.out.println("小文字: " + resultStr.toLowerCase());
            System.out.println();
        }
    }
}

文字列を使った列挙型の作成

  1. 文字列を使って列挙型を作成するために以下のコードを追加します。
public class Demo {
    public static void main(String[] args) {
        String resultStr = "FAIL";
        StudentResult result = StudentResult.valueOf(resultStr);
        System.out.print("文字列からの列挙型: " + result);
    }
}
  1. 端末で以下のコマンドを使用してコードを実行します。
javac Demo.java && java Demo

クラス内で列挙型を作成する

  1. クラス内で列挙型を作成して使用するために以下のコードを追加します。
public class Student {
    String name;
    StudentResult result;

    // 列挙型を定義する
    enum StudentResult {
        PASS,
        FAIL,
        ABSENT;
    }

    // コンストラクタ
    Student(String s, StudentResult sr) {
        name = s;
        result = sr;
    }

    // 列挙型のif-elseメソッド
    public void printResult() {
        if (this.result == StudentResult.ABSENT)
            System.out.println(this.name + "は試験に欠席しました。");

        else if (this.result == StudentResult.PASS)
            System.out.println(this.name + "は試験に合格しました。");

        else
            System.out.println(this.name + "は試験に不合格でした。");
    }

    // 列挙型のメソッド
    public boolean wasAbsent() {
        if (this.result == StudentResult.ABSENT)
            return true;
        else
            return false;
    }

    // メインメソッド
    public static void main(String[] args) {
        Student s1 = new Student("Justin", StudentResult.ABSENT);
        Student s2 = new Student("Jessica", StudentResult.PASS);

        s1.printResult();
        s2.printResult();

        System.out.println("学生s1は欠席していました: " + s1.wasAbsent());
    }
}
  1. 端末で以下のコマンドを使用してコードを実行します。
javac Student.java && javac Demo.java && java Student

EnumSet の使用

  1. EnumSet を使用するために以下のコードを追加します。
import java.util.EnumSet;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumSet<StudentResult> resultSet1 = EnumSet.of(StudentResult.FAIL, StudentResult.PASS);
        EnumSet<StudentResult> resultSet2 = EnumSet.allOf(StudentResult.class);

        System.out.println("Enum Set-1: " + resultSet1);
        System.out.print("Enum Set-2: " + resultSet2);
    }
}

EnumMaps の使用

  1. EnumMaps を使用するために以下のコードを追加します。
import java.util.EnumMap;
import java.util.Map;

enum StudentResult {
    PASS,
    FAIL,
    ABSENT;
}

public class Demo {
    public static void main(String[] args) {
        EnumMap<StudentResult, String> resultMap = new EnumMap<>(StudentResult.class);
        resultMap.put(StudentResult.PASS, "Student Passed the exam");
        resultMap.put(StudentResult.FAIL, "Student Failed the exam");
        resultMap.put(StudentResult.ABSENT, "Student was absent for the exam");

        for (Map.Entry<StudentResult, String> e : resultMap.entrySet())
            System.out.println(e.getKey() + " --> " + e.getValue());
    }
}

まとめ

この実験では、列挙型を作成する方法、if-else文とswitch文で使用する方法、列挙型を反復処理する方法、そのtoString()メソッドを使用する方法、文字列を使って列挙型を作成する方法、クラス内で列挙型を作成する方法、列挙型定数を効率的に格納するためにEnumSetを使用する方法、列挙型のキー-値ペアを格納するためにEnumMapsを使用する方法、および列挙型で具象メソッドと抽象メソッドを使用する方法を学びました。また、列挙型は定数値のコレクションを定義するために使用され、Javaにおいて型安全性を向上させることも学びました。