Java Enum (enum)
Java enum — это специальный класс, который обычно представляет набор констант, таких как 4 сезона года, 12 месяцев года, 7 дней недели и направления, такие как восток, юг, запад, север и т. д.
Классы Java enum определяются с помощью ключевого слова enum, при этом каждая константа отделяется запятой,для их разделения.
Например, определите enum-класс для цветов.
enum Color
{
RED, GREEN, BLUE;
}
Приведенный выше enum-класс Color имеет цветовые константы RED, GREEN, BLUE, представляющие соответственно красный, зеленый и синий.
Пример использования:
Пример
{
RED, GREEN, BLUE;
}
public class Test
{
// Выполнить и вывести результат
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
При выполнении приведенного выше кода выводится следующий результат:
RED
Использование перечислений во внутренних классах
Классы перечислений также можно объявлять во внутренних классах:
Пример
{
enum Color
{
RED, GREEN, BLUE;
}
// Выполнить и вывести результат
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
}
}
При выполнении приведенного выше кода выводится следующий результат:
RED
Каждое перечисление внутренне реализуется через Class, а все значения перечисления являются public static final.
Приведенный выше класс перечисления Color преобразуется в следующую реализацию внутреннего класса:
class Color
{
public static final Color RED = new Color();
public static final Color BLUE = new Color();
public static final Color GREEN = new Color();
}
Перебор элементов перечисления
Для перебора элементов перечисления можно использовать оператор for:
Пример
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
for (Color myVar : Color.values()) {
System.out.println(myVar);
}
}
}
При выполнении приведенного выше кода выводится следующий результат:
RED GREEN BLUE
Использование enum-классов в switch
Enum-классы часто используются в операторах switch:
Пример
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
Color myVar = Color.BLUE;
switch(myVar) {
case RED:
System.out.println("Red");
break;
case GREEN:
System.out.println("Green");
break;
case BLUE:
System.out.println("Blue");
break;
}
}
}
При выполнении приведенного выше кода выводится следующий результат:
Blue
методы values(), ordinal() и valueOf()
Классы перечислений, определённые с помощью enum, по умолчанию наследуют класс java.lang.Enum и реализуют интерфейсы java.lang.Serializable и java.lang.Comparable.
Методы values(), ordinal() и valueOf() находятся в классе java.lang.Enum:
- values() возвращает все значения в классе перечисления.
- Метод ordinal() может найти индекс каждой константы enum, точно так же, как индекс массива.
- Метод valueOf() возвращает константу enum, соответствующую указанному строковому значению.
Пример
{
RED, GREEN, BLUE;
}
public class Test
{
public static void main(String[] args)
{
// Вызов values()
Color[] arr = Color.values();
// Перебор enum
for (Color col : arr)
{
// Просмотр индекса
System.out.println(col + " с индексом " + col.ordinal());
}
// Используйте valueOf(), чтобы вернуть константу перечисления; если она не существует, будет выброшено исключение IllegalArgumentException
System.out.println(Color.valueOf("RED"));
// System.out.println(Color.valueOf("WHITE"));
}
}
При выполнении приведенного выше кода выводится следующий результат:
RED at index 0 GREEN at index 1 BLUE at index 2 RED
Члены класса enum
Как и обычные классы, перечисления могут иметь собственные переменные, методы и конструкторы. Конструкторы могут использовать только модификатор доступа private, поэтому их нельзя вызывать извне.
Перечисления могут содержать как конкретные, так и абстрактные методы. Если в классе перечисления есть абстрактные методы, каждый экземпляр класса перечисления должен их реализовать.
Пример
{
RED, GREEN, BLUE;
// Конструктор
private Color()
{
System.out.println("Вызван конструктор для : " + this.toString());
}
public void colorInfo()
{
System.out.println("Универсальный цвет");
}
}
public class Test
{
// Вывод
public static void main(String[] args)
{
Color c1 = Color.RED;
System.out.println(c1);
c1.colorInfo();
}
}
При выполнении приведенного выше кода выводится следующий результат:
Constructor called for : RED Constructor called for : GREEN Constructor called for : BLUE RED Universal ColorДругие расширения