Основы перечислений (enum) в Java

JavaJavaBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабе вы узнаете о перечислениях (enum) в Java. Перечисления - это специальный тип данных в Java, который позволяет определить фиксированный набор констант. Вы научитесь создавать, использовать и манипулировать перечислениями в Java.

Создание перечисления (enum)

  1. Создайте новый файл с именем StudentResult.java в директории ~/project.
  2. Добавьте следующий код, чтобы создать перечисление под названием StudentResult:
public enum StudentResult {
    PASS,
    FAIL,
    ABSENT
}

Использование перечислений (enum)

  1. Создайте новый файл с именем Demo.java в директории ~/project.
  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

Использование перечислений (enum) с операторами if-else

  1. Добавьте следующий код, чтобы использовать перечисление StudentResult с операторами if-else:
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.");
    }
}

Использование перечислений (enum) с оператором switch

  1. Добавьте следующий код, чтобы использовать перечисление StudentResult с оператором switch:
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;
        }
    }
}

Перебор элементов перечисления (enum)

  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() для перечислений (enum)

  1. Добавьте следующий код, чтобы использовать метод toString() для перечислений:
public class Demo {
    public static void main(String[] args) {
        for(StudentResult sr : StudentResult.values()) {
            String resultStr = sr.toString();
            System.out.println("Uppercase: " + resultStr);
            System.out.println("Lowercase: " + resultStr.toLowerCase());
            System.out.println();
        }
    }
}

Создание перечислений (enum) из строк

  1. Добавьте следующий код, чтобы создать перечисления из строк:
public class Demo {
    public static void main(String[] args) {
        String resultStr = "FAIL";
        StudentResult result = StudentResult.valueOf(resultStr);
        System.out.print("Enum from String: " + result);
    }
}
  1. Запустите код с помощью следующей команды в терминале:
javac Demo.java && java Demo

Создание перечислений (enum) внутри классов

  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());
    }
}

Резюме

В этом практическом занятии вы узнали, как создавать перечисление (enum), использовать его в if-else и switch-операторах, перебирать элементы перечисления, использовать метод toString(), создавать перечисления из строк, создавать перечисление внутри класса, эффективно хранить константы перечисления с использованием EnumSet, хранить пары ключ-значение для перечислений с использованием EnumMaps, а также использовать конкретные и абстрактные методы в перечислениях. Вы также узнали, что перечисления используются для определения коллекции константных значений и что они повышают безопасность типов в Java.