Enum (Java)

Материал из Циклопедии
Перейти к навигации Перейти к поиску

Enum (перечисление) в Java — определяемый программистом тип данных, состоящий из множества предопределенных констант. Введены в Java 1.5.

Предпосылки[править]

До введения enum основным путём использования перечислений было использование ряда констант некоторого типа (как правило int или String) в классе. Такой подход имел ряд недостатков, среди которых:

  • Небезопасность: можно было установить значение, несоответствующее ни одной из констант;
  • Неинформативность: константа имела собственное значение, не содержащее заложенного в эту константу смысла, и отображалась соответственно;
  • Отсутствие собственного пространства имён; следовало избегать конфликтов имён объявленных констант и прочих членов класса.

В качестве альтернативы в Java 1.5 появились typesafe enums.

Структура enum[править]

Объявление enum подобно объявлению класса в java. Вместо ключевого слова class используется слово enum, тело перечисления должно начинаться с объявления констант через запятую. В соответствии с code convention, константы следует объявлять в верхнем регистре, отделяя слова нижним подчёркиванием (например, MONDAY или GREEN_COLOR) Кроме того, enum может содержать:

Для каждого элемента перечисления имеется возможность переопределять использованные методы. В частности, это позволяет объявить в теле перечисления абстрактный метод и переопределить его для каждого элемента.

Каждое перечисление неявно наследует класс java.lang.Enum, поэтому не может наследоваться от другого класса. При этом допустима реализация интерфейсов. Унаследоваться от перечисления также нельзя. Класс Enum реализует интерфейсы Comparable и Serializable, а также предоставляет ряд методов для работы с перечислением, такие как

  • name() — возвращает имя константы;
  • ordinal() — очерёдность объявления данной константы в перечислении;

Кроме того, к каждому enum-классу на стадии компиляции добавляются такие методы, как:

  • статический valueOf(String name) — возвращает константу по её имени;
  • статический values() — возвращает массив, содержащий все объявленные константы.

Примеры кода[править]

Простое перечисление, содержащее только объявление констант:

public enum InterestingWikiProjects {
    WIKIREALITY, CYCLOWIKI, ANEKDOT_ME;
}

Более сложный пример перечисления, содержащий поле, метод и конструктор с параметрами.

public enum InterestingWikiProjects {
    WIKIREALITY ("wikireality.ru"),
    CYCLOWIKI   ("cyclowiki.org"),
    ANEKDOT_ME  ("anekdot.me");

    private final String url;
    InterestingWikiProjects(String url) {
        this.url = url;
    }
    private String getURL() { return url; }
}

Ссылки[править]