Java - Enums: Начальное руководство для начинающих
Привет, стремящиеся к java-программированию! Сегодня мы погрузимся в увлекательный мир Java Enums. Не волнуйтесь, если вы раньше не слышали об этом — к концу этого урока вы станете экспертом по Enum! Так что возьмите чашечку вашего любимого напитка, и начнем!
Введение в 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 унций)
Разберем, что происходит в этом примере:
- Мы создаем переменную
CoffeeSize
mySize
и устанавливаем ее значениеСРЕДНИЙ
. - Мы выводим описание
mySize
с помощью методаgetDescription()
. - Мы выводим порядковое значение
СРЕДНИЙ
, которое равно 1 (помните, порядковые значения начинаются с 0). - Мы используем цикл for-each, чтобы пройтись по всем значениям
CoffeeSize
и вывести их описания. - Наконец, мы демонстрируем использование
valueOf()
, чтобы получить константу enumБОЛЬШОЙ
по ее имени.
И вот и все! Вы только что сделали свои первые шаги в мире Java Enums. Это мощное средство для представления фиксированных наборов констант в безопасном по типу способе.
Помните, Enums больше чем просто улучшенные константы. У них могут быть конструкторы, поля и методы, что делает их чрезвычайно универсальными. Они идеально подходят для представления таких вещей, как дни недели, масти карт, размеры пиццы или любой другой набор фиксированных значений в ваших программах.
По мере вашего продвижения по Java, вы обнаружите множество других применений для Enums. Они являются фундаментальной частью языка Java, и их освоение сделает вас более эффективным и продуктивным программистом.
Удачи в практике, удачи в программировании, и, что самое важное, наслаждайтесь процессом обучения. И до того, как вы это заметите, вы будете писать сложные Java-программы с легкостью. Счастливого кодирования!
Credits: Image by storyset