English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этом руководстве мы изучим перечисления в Java. Мы будем изучать создание и использование перечислений и классов перечислений с помощью примеров.
В Java перечисление - это тип с фиксированным набором возможных значений. Мы используем ключевое слово enum для объявления перечисления. Например,
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE {}
Здесь мы создали перечисление с именем Size.
Значения, находящиеся в фигурных скобках, называются значениями перечисления (константами). Это уникальные значения, которые может сохранять тип перечисления.
Внимание:Константы перечислений обычно представляются в верхнем регистре.
Давайте приведем простой пример.
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
Из上面的 примера можно看出, мы используем имя перечисления для доступа к значениям констант.
Так же, мы можем создать переменную типа перечисления. Например,
Size pizzaSize;
Здесь pizzaSize — переменная типа Size. Она может принимать только 4 значения.
pizzaSize = Size.МАЛЕНЬКИЙ; pizzaSize = Size.МЕДИАМ; pizzaSize = Size.БОЛЬШОЙ; pizzaSize = Size.ВЕЛИКОЙ ВЕЛИЧИНЫ;
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE {} class Test { Size pizzaSize; public Test(Size pizzaSize) { this.pizzaSize = pizzaSize; {} public void orderPizza() { switch(pizzaSize) { case МАЛЕНЬКИЙ: System.out.println("Я заказал маленькую пиццу."); break; case МЕДИАМ: System.out.println("Я заказал пиццу среднего размера."); break; default: System.out.println("Я не знаю, что заказывать."); break; {} {} {} class Main { public static void main(String[] args) { Test t1 = new Test(Size.MEDIUM); t1.orderPizza(); {} {}
Результат вывода
Я заказал пиццу среднего размера.
В вышеуказанном программном примере мы создали тип перечисления Size. Затем мы объявили переменную pizzaSize типа Size.
Переменная pizzaSize может принимать только 4 значения (МАЛЕНЬКИЙ, МЕДИАМ, БОЛЬШОЙ, ВЕЛИКОЙ ВЕЛИЧИНЫ).
Переменная pizzaSize присвоена константе МЕДИАМ. На основе этого будет напечатан один из вариантов switch case.
В Java тип перечисления считается特种 типом класса. Он был введен в версии Java 5.
Класс-перечисление может содержать методы и поля, как и обычный класс.
enum Size { constant1, constant2, …, constantN; //Методы и поля {}
Константы перечисления всегда по умолчанию public static final.
При создании класса-перечисления компилятор также создает экземпляры (объекты) для каждого значения перечисления.
enum Size{ МАЛЕНЬКИЙ, МЕДИАМ, БОЛЬШОЙ, ВЕЛИКОЙ ВЕЛИЧИНЫ; public String getSize() { //Это будет ссылаться на объект МАЛЕНЬКИЙ switch(this) { case МАЛЕНЬКИЙ: возврат "маленький"; case МЕДИАМ: return "medium"; case LARGE: return "large"; case EXTRALARGE: return "extra large"; default: return null; {} {} public static void main(String[] args) { //Использование объекта SMALL для вызова метода getSize() System.out.println("Размер пиццы small" + Size.SMALL.getSize()); {} {}
Результат вывода
Размер пиццы small
В примере выше мы создали класс enum Size. У него есть четыре константы SMALL, MEDIUM, LARGE и EXTRALARGE.
Поскольку Size является классом enum, компилятор автоматически создает экземпляр для каждой константы enum.
Внутри метода main() мы уже использовали экземпляр SMALL для вызова метода getSize().
Как и обычные классы, класс enum может содержать конструктор. Для получения дополнительной информации обратитесь в:Java枚举 конструкторы.
В классе enum есть некоторые предопределенные методы, которые можно использовать в любое время.
Метод ordinal() возвращает положение константы enum. Например:
ordinal(SMALL) //возвращает 0
Метод compareTo() сравнивает константы enum по значению их порядкового номера. Например:
Size.SMALL.compareTo(Size.MEDIUM) //возвращает ordinal(SMALL) - ordinal(MEDIUM)
Метод toString() возвращает строковое представление константы enum. Например:
SMALL.toString() //возвращает "SMALL"
Метод name() возвращает строковое представление определения константы enum. Значение, возвращаемое методом name(), является final. Например:
name(SMALL) //возвращает "SMALL"
Метод valueOf() принимает строку и возвращает константу enum с таким же именем строки. Например:
Size.valueOf("SMALL") //возвращает константу SMALL
Метод values() возвращает массив типа enum, содержащий все константы enum. Например:
Size[] enumArray = Size.value();
В 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. Например,
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE {}
Это делает наш код более интуитивным.
Таким образом,枚举 обеспечивает безопасность типов на этапе компиляции.
Если мы объявляем переменную типа Size (например, как показано в примере выше), то можем быть уверены, что переменная будет содержать один из четырех значений. Если мы пытаемся передать значение, которое не входит в эти четыре значения, компилятор выбросит ошибку.