Учебное пособие по Java Enum: что это такое и как его реализовать?



Эта статья по Java Enum Tutorial предоставит вам подробные сведения о константах Enum вместе с практическими примерами для лучшего понимания.

В Перечисление в это способ определения класса с фиксированными и именованными константами с их соответствующими используя ключевое слово перечисление. В этом ' Руководство Java Enum »Статьи, мы научимсяопределить Enumeration вместе спримеры для лучшего понимания.

Что такое перечисление?

Перечисления Java - это классы, которые имеют фиксированный набор констант или переменных, которые не имеют тенденции к изменению. Перечисление в Java достигается с помощью ключевого слова перечисление. Ява перечислить константы статический и окончательный неявно. Функция Enum доступна с JDK версии 1.5.





Зачем нам перечисление?

перечислить улучшает безопасность типов при проверке во время компиляции, чтобы избежать ошибок во время выполнения, избегая шаблонного кода. Например, если вам нужно выбрать одну возможность из наименьшего количества доступных вариантов, скажем,

Работа Тип: (Контракт / Временный / Постоянный)



Сотрудник учебного пособия по Java enum

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

Различия между Enum и Class

Хотя класс и перечисление имеют схожие функции в среде Java, они различаются в нескольких аспектах. Обсудим различия



Enum Класс
Константы перечисления не могут быть переопределеныКонстанты класса можно переопределить
Enum не поддерживает создание объектовКласс поддерживает создание объектов
Enum не может расширять другие классыКласс может расширять другие классы
enum cИнтерфейс агрегатаКласс может реализовать интерфейс


Практические примеры Enum

Теперь, чтобы лучше понять enum, давайте выполним несколько практических примеров, основанных на следующем.

Определение перечисления в Java

Enum может быть объявлен либо внутри класса, либо вне cпозволять. Но его нельзя объявить внутри какого-либо метода. Давайте рассмотрим небольшой пример, чтобы понять его синтаксис, определение и объявление.

Синтаксис:

enum name {константы}

В этом примере мы объявили основной() метод внутри перечислить

определение пакета открытый класс Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Выход

KTM

В этом примере основной() объявлен метод вне перечисления.

определение пакета enum Color {BAJAJ, KTM, YAMAHA} открытый класс Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//Вывод:

ЯМАХА

Enum используется в Switch Case

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

Здесь мы объявим перечисление с днями недели в качестве его элементов и передадим данные в виде строки для печати данных соответствующего случая.

пакет переключился enum Day {ВОСКРЕСЕНЬЕ, ПОНЕДЕЛЬНИК, ВТОРНИК, СРЕДА, ЧЕТВЕРГ, ПЯТНИЦА, СУББОТА} public class Edureka {Day day public Edureka (Day day) {this.day = day} public void dayIsLike () {switch (day) {case ПОНЕДЕЛЬНИК: System.out.println ('Привет, сегодня понедельник') прервать регистр ВТОРНИК: System.out.println ('Привет, сегодня вторник') прервать регистр СРЕДА: System.out.println ('Привет, сегодня среда ') break case THURSDAY: System.out.println (' Привет, сегодня четверг ') break case FRIDAY: System.out.println (' Hello, Today is Friday. ') break case SATURDAY: System.out.println (' Привет, сегодня ваши выходные ') break case SUNDAY: System.out.println (' Hi, Today is a holiday ') break default: System.out.println (' Пожалуйста, enter a valid day. ') Break}} public static void main (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Вывод:

Привет, сегодняпонедельник

Наследование с использованием enum

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

Здесь мы унаследуем ОС от производителя телефона.

наследование пакетов import java.util.ArrayList import java.util.List public class Edureka {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) для (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} статического интерфейса HTTPMethodConvertible {public String getHTTPMethodType ()} статическое перечисление LibraryEnum реализует HTTPMethodConvertibleEC {FIRST) ('Google Pixel' 'Huawei'), ТРЕТИЙ ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} общедоступная строка getHTTPMethodType () {return httpMethodType}} статическое перечисление ClientEnum реализует HTTPMethodConvertible {huawei ('HongMing OS) ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

//Вывод:

абстрактный класс и разница в интерфейсе

Google Pixel
Android One

Enum с настраиваемыми значениями

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

enum Traffic {КРАСНЫЙ («СТОП»), ОРАНЖЕВЫЙ («ПОДОЖДИТЕ»), ЗЕЛЕНЫЙ («ИДТИ»)}

В приведенном выше примере мы видим, что перечисление Traffic состоит из трех членов. А именно,

КРАСНЫЙ АПЕЛЬСИН и ЗЕЛЕНЫЙ со своими собственными различными пользовательскими значениями СТОП, ПОДОЖДИТЕ и ИДТИ соответственно.

Теперь, чтобы использовать тот же тип перечисления в коде, мы должны следовать некоторым пунктам, а именно:

  • Нам нужно создать параметризованный конструктор для этого класса перечисления. Потому что мы знаем, что перечислить Объект класса не может быть создан явно, поэтому для инициализации мы используем параметризованный конструктор.
  • В строитель не может быть публичным или защищенным он должен иметь частный или по умолчанию модификаторы. Если мы создадим общедоступные или защищенные, это позволит инициализировать более одного объекта, который полностью против enum функциональность.
  • Нам нужно создать метод получения, чтобы получить значение перечисления.

Давайте выполним программу, основанную на этом.

перечисление трафика пакета TrafficSignal {RED ('STOP'), GREEN ('GO'), ORANGE ('WAIT') private String action public String getAction () {return this.action} private TrafficSignal (String action) {this.action = action}} открытый класс Edureka {public static void main (String args []) {TrafficSignal [] signal = TrafficSignal.values ​​() for (TrafficSignal signal: signal) {System.out.println ('name:' + signal.name () + 'действие:' + signal.getAction ())}}}

//Вывод:

имя: КРАСНЫЙ действие: СТОП
имя: ЗЕЛЕНЫЙ действие: GO
мужскойe: ОРАНЖЕВЫЙ действие: ПОДОЖДИТЕ

Перечислить в операторах if-else-if

Теперь выполним программу на основе перечисление в операторах if-else-if. Здесь мы найдем направление обхода, передав значения направлений, доступных в перечислении.

package Directions enum Directions {EAST, WEST, NORTH, SOUTH} открытый класс Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Direction: East')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Directions : Север ')} else {System.out.println (' Направление: Юг ')}}}

//Вывод:

Сказатьction: Север

Различные методы, используемые с enum

Ценности(): Когда вы создаете перечисление, Компилятор Java внутренне добавляет ценности() метод. Этот метод возвращает массив содержащий все значения перечисления.

//Синтаксис:

общедоступный статический тип перечисления [] значения ()

Мы узнаем значение индекса конкретного элемента в массиве.

значения пакета enum Color {RED, GREEN, BLUE} открытый класс Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() для (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//Вывод:

КРАСНЫЙ при индексе 0
ЗЕЛЕНЫЙ в индексе 1
СИНИЙ с индексом 2
СЕТЬ

Ценность(): Этаиспользуется для возврата константы перечисления, значение которой равно передается в качестве аргумента при вызове этого метода.

//Синтаксис:

общедоступный статический перечисляемый тип valueOf (String str)

Здесь мы найдем стоимость конкретного телефона на основе входных данных, которые мы передаем в строку.

значения пакета: enum Mobile {Samsung (1099), Apple (1250), Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} public class Edureka {public static void main (String args []) {System.out.println ('Список сотовых телефонов:') для (Mobile m: Mobile.values ​​()) {System.out.println (m + 'затраты' + m.showPrice () + 'доллары' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Selected:' + ret)}}

//Вывод:

Самсунг стоит 1099 долларов
Apple стоит 1250 долларов
Google стоит 1325 долларов
Выбрано: Samsung

Порядковый (): Интерпретатор Java добавляет порядковый () внутренний метод, когда он создает перечисление. Метод ordinal () возвращает показатель значения перечисления.

//Синтаксис:

публичный финал int порядковый ()

Здесь мы узнаем значение индекса конкретного элемента в массиве. а также положение плодов вишни.

Порядковый номер пакета enum Fruits {Apple, Banana, Cherry, Date, Elderberry} enum Vegetables {Carrot, Beetroot, Beans, Tomato, Onion} открытый класс Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. values ​​() for (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Фрукты f1, f2, f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'идет после' + f1)} Vegetables v1 = Vegetables.Beetroot if (f1.equals (v1)) {System.out.println (' Неверно ')}}}

//Вывод:

Яблоко: 0
Банан: 1
Вишня: 2
Дата: 3
Бузина: 4
Вишня идет после яблока

Преимущества Enum

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

Пример использования Enum: игра 'Камень, ножницы, бумага'

Мы будем использовать перечислить на Java, чтобы создать нашу детскую игру, камень (камень), ножницы и бумага . Следующий код объясняет, как это сделать.

пакет Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} открытый класс SPS {public static void main (String [] args) {Random random = new Random () boolean gameOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = new Scanner (System.in) System.out.println ('nLet us begin ... n') while (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') логический validInput do {System.out.print ('nВаш ход (введите s для ножниц, p для бумаги, t для камня, q для выхода): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} else if (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} else if (inChar == 'p') {playerMove = HandSign.PAPER} else if (inChar == 't') {playerMove = HandSign.STONE} else {System.out.println ( 'nПроверьте ввод и повторите попытку! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt's My turn: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's My turn: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIt's My turn: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor режет бумагу , Я выиграл! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper обертывает камень, я выиграл! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone ломает ножницы, я выиграл! n') ++ numComputerWon} else {System.out.println ('nПоздравляем. ..! Вы выиграли! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nКоличество испытаний: '+ numTrials) System.out.printf (' Я выиграл% d (%. 2f %%) . Вы выиграли% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Пока! Надеюсь, вам понравилось ...! ' )}}

//Вывод:

Начнем...
Ножницы-бумага-камень
Ваша очередь (введите s для ножниц, p для бумаги, t для камня, q для выхода):
s
Моя очередь: КАМЕНЬ
Камень ломается ножницами, я выиграл!
Ножницы-бумага-камень
Ваша очередь (введите s для ножниц, p для бумаги, t для камня, q для выхода):
какая
Количество попыток: 1 Я выиграл 1 (100,00%). Вы выиграли 0 (0,00%).
Пока! Надеюсь, вам понравилось ..!

На этом мы подошли к концу этого руководства по Java Enum. Надеюсь, вы поняли Enum в Java и его реализацию на некоторых примерах в реальном времени.

Теперь, когда вы поняли перечислить основы в этом «Руководстве по Java Enum» ознакомьтесь с от Edureka, надежной компании по онлайн-обучению с сетью из более чем 250 000 довольных учащихся по всему миру. Курсы обучения и сертификации по Java J2EE и SOA от Edureka предназначены для студентов и профессионалов, желающих стать Java-разработчиками. Курс разработан, чтобы дать вам хорошее начало в программировании на Java и обучить вас как основным, так и продвинутым концепциям Java, а также различным средам Java, таким как Hibernate и весна .

Есть вопрос к нам? Упомяните об этом в разделе комментариев этого блога «Java Enum Tutorial», и мы свяжемся с вами как можно скорее.