Enum Java

Posted on  by admin
  1. Enum Java Пример
  2. Enum Java Что Это

Перечисления enum При программировании часто необходимо использовать ограниченное множество допустимых значений для некоторого типа данных. Так, например, день недели может иметь 7 разных значений, месяцев в году не более 12, и всего 4 времени года. Для решения подобных задач во многих языках программирования предусмотрен специальный тип данных - перечисление (enum). В Java перечисление enum появилось не сразу только в версии Java 5. Синтаксис перечисления enum Описание с помощью enum типа данных Season для хранения времени года можно представить в следующем виде.

Перечисления enum. В простейшей форме перечисление - это список именованных констант.

Class java.lang.Enum Таким образом наследование за разработчика автоматически выполняет компилятор Java. Далее в тексте enum-классом будет называться класс, созданный компилятором для реализации перечисления, а возможные значения перечисляемого типа - элементами enum'a. Элементы перечисления enum Элементы enum Season (WINTER, SPRING и т.д.) - это статически доступные экземпляры enum-класса Season. Их статическая доступность позволяет выполнять сравнение с помощью оператора сравнения ссылок. Season.name = WINTER, season.toString = WINTER, season.ordinal = 0 В примере использованы методы name, toString и ordinal. Семантика методов - очевидна.

Следует обратить внимание, что данные методы enum-класс наследует от класса java.lang.Enum Получение елемента enum по строковому представлению его имени Довольно часто возникает задача необходимости получения элемента enum по его строковому представлению. Для этих целей в каждом enum-классе компилятор автоматически создает специальный статический метод: public static EnumClass valueOf (String name), который возвращает элемент перечисления EnumClass с названием, равным name. String name = 'WINTER'; Season season = Season.valueOf(name); В результате выполнения кода переменная season будет равна Season.WINTER. Cледует обратить внимание, что если элемент не будет найден, то будет вызвано исключение IllegalArgumentException, а в случае, если name=null - NullPointerException. Об этом не следует забывать.

Получение элементов перечисления Если необходимо получить список всех элементов enum-класса во время выполнения, то для этих целей в следует использовать метод: public static EnumClass values.

Java

Если мы посмотрим на пример выше, то сразу увидим две проблемы использования констант, которые решаются с помощью Enam:. Мы можем передать любой int в параметр метода simpleConstantsExample(int i). Эта проблема решается только фиксированным значением simpleEnumExample(ThreadStates th), что обеспечивает безопасность. Мы можем изменить значение константы int в ThreadStatesConstantClass классе, но программа не будет бросать никаких исключений, хотя может работать не так, как ожидалось. Но если мы изменим саму константу Enum, то получим исключение.

Enum Java Пример

Результатом выполнения программы будет следующее. Правила использования Enum. Все перечисления в Java неявно расширяют java.lang.Enum класс, который расширяет класс Object и реализует Serializable и Comparable интерфейсы, так что Enum не может наследовать классы. Нельзя заканчивать имя пакета словом enum, например, com.javadevblog.enum — недопустимое имя пакета. Перечисления в Java могут реализовывать интерфейсы. (На примере выше есть Enum, который реализовывает интерфейс Closeable. Enum конструкторы в Java всегда.

Нельзя создать экземпляр перечисления, используя оператор new. Мы можем создавать абстрактные методы в Enum, поэтому все поля Enum должны реализовывать абстрактный метод. (В приведенном выше примере метод g etDetail является абстрактным и все поля в Enum реализовали его.

Мы можем определить метод в Enum, а поля могут переопределять их. Все поля в Enum имеют пространство имен, поэтому мы можем использовать поле только с именем класса: ThreadStates.START. Перечисления могут быть использованы в switch. Пример использования увидим чуть позже в этом уроке.

Мы можем изменять существующее перечисление не нарушая существующей функциональности. Например, мы можем добавить новое поле NEW в ThreadStatesClass и это никак не повлияет на существующую функциональность. Хорошим тоном считается написание большими буквами и нижнее подчеркивание для пробелом. Например, EAST, WEST, EASTDIRECTION и т.д.

Enum Java Что Это

Enum константы неявно и final. Enum константы являются final, но ее можно изменять. Например, мы можем использовать метод setPriority, чтобы изменить приоритет констант в Enum. (Мы увидим его на практике в примере ниже). Мы может безопасно сравнивать константы с помощью « » и метода equals. Они оба будут давать тот же результат.

Продвинутые возможности Enum на примере Мы уже знаем правила использование Enum, его расширенные возможности, а также подводные камни. Самое время испытать это все на примере: JavaEnumExamples.java. Приоритет:4 Используем переопределенный метод. Стандартная реализация ThreadStatesConstructors. Приоритет: 4 Используем переопределенный метод. Реализация START.

Приоритет:1 Константа Enum изменила значение = 10 Закрытие Enum th приоритет = 10 Реализация START. Приоритет: 10::приоритет = 10 Стандартная реализация ThreadStatesConstructors. Приоритет: 2::приоритет = 2 Стандартная реализация ThreadStatesConstructors. Приоритет: 3::приоритет = 3 Стандартная реализация ThreadStatesConstructors. Приоритет: 4::приоритет = 4 Состояние потока: START Состояние потока: DEAD ключ = START:: значение = Поток начал работу ключ = RUNNING:: значение = Поток работает ключ = WAITING:: значение = Поток ждет ключ = DEAD:: значение = Поток умер Используем EnumSet, приоритет = 10 Используем EnumSet, приоритет = 2 Используем EnumSet, приоритет = 3 Используем EnumSet, приоритет = 4.