Перечисления (Enums) в Java: полное руководство по enum и enum-классам
Перечисления (Enums) в Java
В этом руководстве мы изучим перечисления в Java. Научимся создавать и использовать enums и enum-классы с помощью примеров.
В Java enum (сокращение от enumeration) — это тип, имеющий фиксированный набор постоянных значений. Мы используем ключевое слово enum для объявления перечислений. Например,
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
Здесь мы создали перечисление с именем Size. Оно содержит фиксированные значения SMALL, MEDIUM, LARGE и EXTRALARGE.
Эти значения внутри фигурных скобок называются константами перечисления (enum constants).
Пример 1: Java Enum
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } class Main { public static void main(String[] args) { System.out.println(Size.SMALL); System.out.println(Size.MEDIUM); } }
Вывод:
SMALL MEDIUM
Как видно из примера, мы используем имя перечисления для доступа к константным значениям.
Также мы можем создавать переменные типов enum. Например,
Size pizzaSize;
Здесь pizzaSize — переменная типа Size. Ей можно присвоить только 4 значения.
pizzaSize = Size.SMALL; pizzaSize = Size.MEDIUM; pizzaSize = Size.LARGE; pizzaSize = Size.EXTRALARGE;
Пример 2: Java Enum с оператором switch
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } class Test { Size pizzaSize; public Test(Size pizzaSize) { this.pizzaSize = pizzaSize; } public void orderPizza() { switch(pizzaSize) { case SMALL: System.out.println("I ordered a small size pizza."); break; case MEDIUM: System.out.println("I ordered a medium size pizza."); break; default: System.out.println("I don't know which one to order."); break; } } } class Main { public static void main(String[] args) { Test t1 = new Test(Size.MEDIUM); t1.orderPizza(); } }
Вывод:
I ordered a medium size pizza.
В вышеприведенной программе мы создали тип enum Size. Затем объявили переменную pizzaSize типа Size.
Здесь переменная pizzaSize может быть присвоена только 4 значениям (SMALL, MEDIUM, LARGE, EXTRALARGE).
Обратите внимание на оператор,
Test t1 = new Test(Size.MEDIUM);
Он вызовет конструктор Test() внутри класса Test. Теперь переменная pizzaSize назначена константе MEDIUM.
Основываясь на значении, выполняется один из case оператора switch.
Enum-класс в Java
В Java типы enum считаются специальным типом класса. Они были введены с выпуском Java 5.
Enum-класс может включать методы и поля, как обычные классы.
enum Size { constant1, constant2, …, constantN; // методы и поля }
Когда мы создаем enum-класс, компилятор создает экземпляры (объекты) каждой константы перечисления. Также все константы enum всегда являются public static final по умолчанию.
Пример 3: Java Enum-класс
enum Size{ SMALL, MEDIUM, LARGE, EXTRALARGE; public String getSize() { // this будет ссылаться на объект SMALL switch(this) { case SMALL: return "small"; case MEDIUM: return "medium"; case LARGE: return "large"; case EXTRALARGE: return "extra large"; default: return null; } } public static void main(String[] args) { // вызов getSize() // используя объект SMALL System.out.println("The size of the pizza is " + Size.SMALL.getSize()); } }
Вывод:
The size of the pizza is small
В приведенном выше примере мы создали enum-класс Size. У него четыре константы SMALL, MEDIUM, LARGE и EXTRALARGE.
Поскольку Size — enum-класс, компилятор автоматически создает экземпляры для каждой константы перечисления.
Здесь внутри метода main() мы использовали экземпляр SMALL для вызова метода getSize().
Методы Java Enum-класса
В enum-классах есть несколько предопределенных методов, легко доступных для использования.
1. Java Enum ordinal()
Метод ordinal() возвращает позицию константы перечисления. Например,
ordinal(SMALL) // возвращает 0
2. Enum compareTo()
Метод compareTo() сравнивает константы перечисления на основе их порядкового значения. Например,
Size.SMALL.compareTo(Size.MEDIUM) // возвращает ordinal(SMALL) - ordinal(MEDIUM)
3. Enum toString()
Метод toString() возвращает строковое представление констант перечисления. Например,
SMALL.toString() // возвращает "SMALL"
4. Enum name()
Метод name() возвращает определенное имя константы перечисления в строковой форме. Возвращаемое значение метода name() является final. Например,
name(SMALL) // возвращает "SMALL"
5. Java Enum valueOf()
Метод valueOf() принимает строку и возвращает константу перечисления с тем же строковым именем. Например,
Size.valueOf("SMALL") // возвращает константу SMALL.
6. Enum values()
Метод values() возвращает массив типа enum, содержащий все константы перечисления. Например,
Size[] enumArray = Size.values();
Зачем Java Enums?
В Java enum был введен, чтобы заменить использование int-констант.
Предположим, мы использовали коллекцию констант int.
class Size { public final static int SMALL = 1; public final static int MEDIUM = 2; public final static int LARGE = 3; public final static int EXTRALARGE = 4; }
Здесь возникает проблема, если мы печатаем константы. Потому что печатается только число, что может быть неполезно.
Поэтому вместо использования int-констант мы можем просто использовать enums. Например,
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE }
Это делает наш код более интуитивным.
Также enum обеспечивает безопасность типов во время компиляции.
Если мы объявляем переменную типа Size. Например,
Size size;
Здесь гарантируется, что переменная будет содержать одно из четырех значений. Теперь, если мы попытаемся передать значения, отличные от этих четырех, компилятор выдаст ошибку.
java
- Перечисления в C: определение, объявление и операции с флагами
- Освоение операторов Java: типы, синтаксис и практические примеры
- Комментарии в Java: типы, использование и лучшие практики
- Освоение улучшенного цикла for в Java: синтаксис, примеры и лучшие практики
- Освоение строк в Java: создание, методы и лучшие практики
- Интерфейсы в Java: концепции, реализация и лучшие практики
- Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
- Перечисления (Enums) в Java: полное руководство по enum и enum-классам
- Конструкторы в Java Enums: объяснение с практическим примером
- Строковые представления в Java Enums: настройка toString() и лучшие практики