что такое enum в java

Как использовать enum в Java

что такое enum в java. enum. что такое enum в java фото. что такое enum в java-enum. картинка что такое enum в java. картинка enum. Джефф Фризен, JavaWorld | 12 ноября 2020

Джефф Фризен, JavaWorld | 12 ноября 2020

От перечислимых типов к типизированным перечислениям

Перечислимый тип определяется набором связанных констант в качестве его значений. Примерами могут быть: дни недели, стандартные направления компаса север / юг / восток / запад, номиналы монет и типы токенов лексического анализатора.

Перечислимые типы традиционно реализовывались как последовательности целочисленных констант, что демонстрируется следующим набором констант направления:

У такого подхода есть несколько проблем:

Рассмотрим следующий пример шаблона Typesafe Enum. Класс Suit показывает как вы могли бы использовать альтернативный вариант, основанный на классах для перечисления карточных мастей (трефы, бубны, червы, пика):

Затем вы можете проверить suit в таком операторе switch :

Объявление enum и использование его в операторе switch

Простое объявление enum в коде Java выглядит так же, как его аналоги в языках C, C ++ и C #:

Листинг 1: TEDemo.java(версия 1)

Скомпилируйте исходный код следующим образом:

Запустите скомпилированное приложение следующим образом:

Вы должны увидеть следующий результат:

Добавление данных и поведения в типизированное перечисление

Вы можете добавлять данные (в виде полей) и поведение (в виде методов) в типизированное перечисление. Например, предположим, что вам нужно ввести enum для канадских монет, и этот класс должен предоставить средства для возврата количества пятицентовиков, десятицентовиков, двадцатипятицентовиков или долларов, содержащихся в произвольном количестве центов. В листинге 2 показано, как выполнить эту задачу.

Листинг 2: TEDemo.java (версия 2)

Теперь вы знаете, что можете объявлять поля, конструкторы и методы экземпляра в типизированном перечислении ( enum ). А значит, enum — это, по сути, особый вид Java-класса.

Скомпилируйте исходный код следующим образом:

Запустите скомпилированное приложение следующим образом:

Вы должны увидеть следующий результат:

Компилятор Java считает enum синтаксическим сахаром. При обнаружении объявления типизированного перечисления он генерирует класс, имя которого указано в объявлении. Этот класс является подклассом абстрактного Enum > класса, который служит базовым классом для всех типов перечислений.

Список формальных параметров класса Enum выглядит ужасно, но смысл не так уж и сложно понять. Например, Coin extends Enum интерпретируется следующим образом:

Enum также предоставляет метод public static > T valueOf(Class enumType, String name) для возврата константы из указанного перечисления типов с указанным именем:

Вам следует выработать привычку использовать типизированные перечисления ( enum ) вместо традиционных перечисляемых типов. Кроме того, возьмите за привычку использовать лямбды вместо анонимных внутренних классов. Про лямбды я расскажу в следующей статье Java 101.

Перевод Академии Progwards

Источник

ez code

Перечисляемые типы (enum) в Java

В этом уроке мы рассмотрим перечисляемые типы в Java.

Тип enum — это тип, поля которого состоят из набора некоторых констант. Простой пример — стороны света, такой объект будет содержать 4 константы: NORTH, SOUTH, EAST, и WEST. Переменные объявлены большими буквами, потому что это константы.

Синтаксис

Для объявления используется ключевое слово enum. Например, нам необходимо перечислить дни недели:

Enum тип необходимо использовать, если нужно определить некоторое количество констант, значения которых известны заранее, например, варианты пунктов меню или планеты нашей солнечной системы. Следующая программа демонстрирует, как можно использовать, определенный выше набор дней недели.

Данная программа выведет:

Перечисляемые типы в языке Java — более эффективный инструмент, чем аналоги в других языках. Объявление типа enum определяет класс (enum type), который может содержать методы и другие поля. Компилятор автоматически добавляет некоторые методы, когда создает тип enum. Например, он имеет статический метод values, который возвращает массив, содержащий значения объекта в порядке их объявления. Этот метод обычно используется в комбинации с конструкцией for-each для обхода всех значений типа enum. Например, следующий код обходит все планеты:

В следующем примере, Planet — это перечисляемый тип, который содержит планеты солнечной системы. Они объявлены с их физическими свойствами: масса и радиус.

Константы объявлены вместе со значениями радиуса и массы. Эти значения передаются конструктору при создании константы. Синтаксис языка требует, чтобы константы объявлялись до остальных полей и методов, также после объявления необходима точка с запятой. Конструктор enum типа должен быть private или package-private, он автоматически создает перечисленные константы. Нельзя самостоятельно вызвать enum конструктор. В дополнение к конструктору и свойствам, Planet имеет методы для вычисления гравитации и веса объекта на каждой планете.

Источник

что такое enum в java. facebook. что такое enum в java фото. что такое enum в java-facebook. картинка что такое enum в java. картинка facebook. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. twitter. что такое enum в java фото. что такое enum в java-twitter. картинка что такое enum в java. картинка twitter. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. tumblr. что такое enum в java фото. что такое enum в java-tumblr. картинка что такое enum в java. картинка tumblr. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. facebook. что такое enum в java фото. что такое enum в java-facebook. картинка что такое enum в java. картинка facebook. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. twitter. что такое enum в java фото. что такое enum в java-twitter. картинка что такое enum в java. картинка twitter. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. tumblr. что такое enum в java фото. что такое enum в java-tumblr. картинка что такое enum в java. картинка tumblr. Джефф Фризен, JavaWorld | 12 ноября 2020

что такое enum в java. enums java. что такое enum в java фото. что такое enum в java-enums java. картинка что такое enum в java. картинка enums java. Джефф Фризен, JavaWorld | 12 ноября 2020

В предыдущей статье ( Урок 66: Перечисления Enum в Java ) мы рассмотрели что такое Enum в Java. Абстрактный класс Enum появился в 5-й версии Java. Теперь, благодаря абстрактному классу Enum мы можем быстро и легко создавать перечисления без написания повторяющегося кода.

В этой статье мы рассмотрим на конкретных примерах следующее:

1. К Enum можно применять методы:

2. Enum реализовывает интерфейс Comparable

3. Enum реализовывает интерфейс Serializable

Иииииии сразу в бой 🙂 Создадим простой enum Color

Методы name() и ordinal()

У каждого enum есть имя и порядковый номер. Получить их можно с помощью методов name() и ordinal()

Посмотрим как это реализовано в классе Enum

Возникает вопрос, а где же ключевое слово extends возле декларации перечисления Color? Все дело в ключевом слове enum, именно оно даёт понять программе, что вы хотите не просто класс, а именно перечисление, что и дает Вам уйму возможностей.

Методы equals(), hashcode(), toString(), finalize() и clone()

Enum переопределяет базовые методы класса Object. Так что их можно использовать сразу же в наших перечислениях.

Пример 1: equals()

Пример 2: hashCode()

Поскольку мы использовали hashCode(), каждый раз будет выводиться разное значение, сгенерированное автоматически. Когда мы запускали код, получили числа 366712642 и 1829164700. Вы наверняка получите другие числа.

Пример 3: toString()

Посмотрим как они реализованы в классе Enum

Пример 4: finalize(), clone()

Сделать это можно с помощью метода values()

Источник

Enum Types

An enum type is a special data type that enables for a variable to be a set of predefined constants. The variable must be equal to one of the values that have been predefined for it. Common examples include compass directions (values of NORTH, SOUTH, EAST, and WEST) and the days of the week.

Because they are constants, the names of an enum type’s fields are in uppercase letters.

In the Java programming language, you define an enum type by using the enum keyword. For example, you would specify a days-of-the-week enum type as:

You should use enum types any time you need to represent a fixed set of constants. That includes natural enum types such as the planets in our solar system and data sets where you know all possible values at compile time—for example, the choices on a menu, command line flags, and so on.

Here is some code that shows you how to use the Day enum defined above:

Java programming language enum types are much more powerful than their counterparts in other languages. The enum declaration defines a class (called an enum type). The enum class body can include methods and other fields. The compiler automatically adds some special methods when it creates an enum. For example, they have a static values method that returns an array containing all of the values of the enum in the order they are declared. This method is commonly used in combination with the for-each construct to iterate over the values of an enum type. For example, this code from the Planet class example below iterates over all the planets in the solar system.

In the following example, Planet is an enum type that represents the planets in the solar system. They are defined with constant mass and radius properties.

Each enum constant is declared with values for the mass and radius parameters. These values are passed to the constructor when the constant is created. Java requires that the constants be defined first, prior to any fields or methods. Also, when there are fields and methods, the list of enum constants must end with a semicolon.

In addition to its properties and constructor, Planet has methods that allow you to retrieve the surface gravity and weight of an object on each planet. Here is a sample program that takes your weight on earth (in any unit) and calculates and prints your weight on all of the planets (in the same unit):

Источник

что такое enum в java. facebook. что такое enum в java фото. что такое enum в java-facebook. картинка что такое enum в java. картинка facebook. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. twitter. что такое enum в java фото. что такое enum в java-twitter. картинка что такое enum в java. картинка twitter. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. tumblr. что такое enum в java фото. что такое enum в java-tumblr. картинка что такое enum в java. картинка tumblr. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. facebook. что такое enum в java фото. что такое enum в java-facebook. картинка что такое enum в java. картинка facebook. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. twitter. что такое enum в java фото. что такое enum в java-twitter. картинка что такое enum в java. картинка twitter. Джефф Фризен, JavaWorld | 12 ноября 2020что такое enum в java. tumblr. что такое enum в java фото. что такое enum в java-tumblr. картинка что такое enum в java. картинка tumblr. Джефф Фризен, JavaWorld | 12 ноября 2020

что такое enum в java. enums java. что такое enum в java фото. что такое enum в java-enums java. картинка что такое enum в java. картинка enums java. Джефф Фризен, JavaWorld | 12 ноября 2020

Мы рассмотрим на конкретных примерах следующее:

1. Конструкторы и переменные

2. Методы в перечислениях

3. Специальные коллекции для перечислений

Как и в предыдущей статье, нам понадобится enum

1. Конструкторы и переменные в enum

У каждой страны есть своя валюта, чтобы её задать необходимо создать конструктор в enum Country и добавить поле currency

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

Пример использования enum Currency

Поля и методы в перечислениях как и в классах могут иметь модификаторы доступа private, protected, default, public, а вот конструкторы в перечислениях всегда будут иметь модификатор private. При попытке указать другой модификатор мы получим ошибку компиляции.

2. Методы в перечислениях

В перечислениях можно использовать как обычные (общие) так и абстрактные методы, чтобы задать уникальную логику каждому значению перечисления.

Общие методы в перечислениях

Добавим в перечисление метод hasCurrency(), который будет возвращать true или false в зависимости от того, есть валюта у страны или нет

И рассмотрим использование

Абстрактные методы в перечислениях

С абстрактными методами немного сложнее, добавим абстрактный метод void sayHello()

Теперь нам нужно реализовать этот метод во всех значениях перечисления

И посмотрим на использование этого метода.

Если же мы оставим одно значение не переопределённым то получим ошибку компиляции

3. Специальные коллекции для перечислений

Никто нам не запрещает использовать такие коллекции как ArrayList или HashSet вместе с перечислениями, это будет работать точно так же как и с другими значениями. Но раз уж мы знаем наперед значения перечислений, знаем их количество и знаем, что новые значения не будут добавляться в перечисление в работе приложения(в Runtime) т.к. это невозможно, то разработчики придумали специальную коллекцию для них. Эта коллекция работает быстрее и эффективнее обычных, используя, особенности перечислений, которые мы только что описали выше. Эта коллекция называется EnumSet. При работе с enum хорошей практикой является использовать именно коллекцию EnumSet вместо стандартных коллекций.

Примеры создания EnumSet.

Пример 1

Метод allOf() создает EnumSet из всех значений заданого перечисления.

Пример 2

Метод of() создает EnumSet, который содержит заданные значения. Метод перегружен, принимая от одного значения до 5 и еще раз перегружен методом of(E first, E. rest), который принимает сколько угодно значений. Всё это нужно для оптимизации и быстродействия EnumSet.

Пример 3

Метод range() создает EnumSet, который содержит все значения перечисления между указанными значениями.

Пример 4

Метод copyOf() возвращает копию указанного EnumSet, либо же копию любой другой коллекции этого перечисления.

Пример 5

Изначально, в EnumSet у нас были три страны CANADA, POLAND и GERMANY. Ззатем метод complementOf() создал нам EnumSet который содержит значения LAOPAPAS, ZIMKABU, то есть все значения, которые НЕ содержатся в изначальной коллекции.

Пример 6

Метод noneOf() возвращает пустой EnumSet заданного типа.

Почему именно 64 элемента? Потому что в RegularEnumSet все значения перечисления умещаются в одну переменную типа long, максимальное колличество битов в котором равно 64. Все операции в RegularEnumSet основаны на булевой логике.

В JumboEnumSet также используется булевая логика, но вместе с массивом значений.

На этом урок заканчивается

За это время мы изучили:

Спасибо, что были с нами! 🙂

Надеемся, что наша статья была Вам полезна. Можно записаться к нам на курсы по Java на сайте.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *