Java - Enums: Начальное руководство для начинающих

Привет, стремящиеся к java-программированию! Сегодня мы погрузимся в увлекательный мир Java Enums. Не волнуйтесь, если вы раньше не слышали об этом — к концу этого урока вы станете экспертом по Enum! Так что возьмите чашечку вашего любимого напитка, и начнем!

Java - Enums

Введение в Enums

Можете ли вы представить себе ситуацию, когда вам нужно было представить фиксированный набор констант в вашем коде? Может быть, вы создавали программу для кофейни и нужно было представить различные размеры чашек для кофе. Или, может быть, вы разрабатывали игру и нужно было представить различные направления движения персонажа. Вот в чем Enums приходят на помощь!

Enum, сокращение от "enumeration" (перечисление), это специальный тип класса в Java, который представляет группу констант (неперменных переменных, таких как final переменные). Представьте это как изощренный способ создания набора предопределенных значений, которые не изменяются.

Объявление класса

Начнем с того, как мы объявляем Enum. Синтаксис довольно простой:

enum CoffeeSize {
МАЛЕНЬКИЙ,
СРЕДНИЙ,
БОЛЬШОЙ
}

В этом примере мы создали Enum под названием CoffeeSize с тремя константами: МАЛЕНЬКИЙ, СРЕДНИЙ и БОЛЬШОЙ. Обратите внимание, как мы используем ключевое слово enum вместо class, и как каждая константа отделяется запятой.

Конструкторы класса

Enums могут иметь конструкторы, как и обычные классы. Это позволяет нам связать дополнительные данные с каждой константой enum. Расширим наш пример CoffeeSize:

enum CoffeeSize {
МАЛЕНЬКИЙ(8),
СРЕДНИЙ(12),
БОЛЬШОЙ(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}
}

В этой обновленной версии мы добавили конструктор, который принимает параметр int, представляющий количество унций для каждого размера. Мы также добавили частное поле ounces и метод получения getOunces().

Методы класса

Enums могут иметь методы, как и обычные классы. Добавим метод к нашему enum CoffeeSize:

enum CoffeeSize {
МАЛЕНЬКИЙ(8),
СРЕДНИЙ(12),
БОЛЬШОЙ(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " кофе (" + this.ounces + " унций)";
}
}

Мы добавили метод getDescription(), который возвращает строку, описывающую размер кофе. Метод name() наследуется от класса Enum и возвращает имя константы как строку.

Наследованные методы

Все enums неявно наследуются от java.lang.Enum. Это означает, что у них есть некоторые встроенные методы. Вот некоторые из наиболее часто используемых:

Метод Описание
name() Возвращает имя константы enum
ordinal() Возвращает позицию константы enum (начиная с 0)
valueOf(String name) Возвращает константу enum с указанным именем
values() Возвращает массив, содержащий все константы enum

Пример

Теперь пусть объединим все в одном полном примере:

public class CoffeeShop {
public static void main(String[] args) {
CoffeeSize mySize = CoffeeSize.СРЕДНИЙ;

System.out.println("Я заказал " + mySize.getDescription());
System.out.println("Этот размер имеет порядковое значение: " + mySize.ordinal());

System.out.println("\nВсе доступные размеры:");
for (CoffeeSize size : CoffeeSize.values()) {
System.out.println(size.getDescription());
}

// Использование valueOf
CoffeeSize anotherSize = CoffeeSize.valueOf("БОЛЬШОЙ");
System.out.println("\nИспользуя valueOf: " + anotherSize.getDescription());
}
}

enum CoffeeSize {
МАЛЕНЬКИЙ(8),
СРЕДНИЙ(12),
БОЛЬШОЙ(16);

private final int ounces;

CoffeeSize(int ounces) {
this.ounces = ounces;
}

public int getOunces() {
return ounces;
}

public String getDescription() {
return this.name() + " кофе (" + this.ounces + " унций)";
}
}

Вывод

Когда вы выполните эту программу, вы увидите следующий вывод:

Я заказал СРЕДНИЙ кофе (12 унций)
Этот размер имеет порядковое значение: 1

Все доступные размеры:
МАЛЕНЬКИЙ кофе (8 унций)
СРЕДНИЙ кофе (12 унций)
БОЛЬШОЙ кофе (16 унций)

Используя valueOf: БОЛЬШОЙ кофе (16 унций)

Разберем, что происходит в этом примере:

  1. Мы создаем переменную CoffeeSize mySize и устанавливаем ее значение СРЕДНИЙ.
  2. Мы выводим описание mySize с помощью метода getDescription().
  3. Мы выводим порядковое значение СРЕДНИЙ, которое равно 1 (помните, порядковые значения начинаются с 0).
  4. Мы используем цикл for-each, чтобы пройтись по всем значениям CoffeeSize и вывести их описания.
  5. Наконец, мы демонстрируем использование valueOf(), чтобы получить константу enum БОЛЬШОЙ по ее имени.

И вот и все! Вы только что сделали свои первые шаги в мире Java Enums. Это мощное средство для представления фиксированных наборов констант в безопасном по типу способе.

Помните, Enums больше чем просто улучшенные константы. У них могут быть конструкторы, поля и методы, что делает их чрезвычайно универсальными. Они идеально подходят для представления таких вещей, как дни недели, масти карт, размеры пиццы или любой другой набор фиксированных значений в ваших программах.

По мере вашего продвижения по Java, вы обнаружите множество других применений для Enums. Они являются фундаментальной частью языка Java, и их освоение сделает вас более эффективным и продуктивным программистом.

Удачи в практике, удачи в программировании, и, что самое важное, наслаждайтесь процессом обучения. И до того, как вы это заметите, вы будете писать сложные Java-программы с легкостью. Счастливого кодирования!

Credits: Image by storyset