Водич за Јава Енум: Шта је то и како га применити?



Овај чланак о Јава Енум водичу пружиће вам детаљно знање о Енумовим константама, заједно са практичним примерима за боље разумевање.

Тхе Набрајање у је начин дефинисања класе са фиксним и именованим константама са њиховим одговарајућим користећи кључну реч енум. У ово ' Водич за Јава Енум ”, Научићемо дадефинисати Попис заједно сапримери за боље разумевање.

Шта је пописивање?

Јава Енумс су класе које имају фиксни скуп константи или променљивих које немају тенденцију да се мењају. Набрајање у Јави постиже се помоћу кључне речи енум. Јава енум константе су статички и коначни имплицитно. Функција Енум је доступна од ЈДК верзија 1.5.





Зашто нам је потребно пописивање?

енум побољшава сигурност типова током провере током компајлирања како би се избегле грешке у току извршавања избегавањем кода бојлер-а. На пример, ако морате да изаберете једну могућност од најмање расположивих опција, рецимо,

Посао Тип: (Уговор / Привремени / Стални)



Запослени у Јава енум туториалу

Тада би најбоља опција била употреба енум. Јер енум може се лако користити у прекидачу. енум може се прећи. енум моћи имати поља, конструктори и методе. Стога, повећава проверу времена компајлирања и избегава грешке услед уношења неважећих константи, јер сте већ документовали које вредности су легалне за употребу.

прослеђивање вредности вс пролазак референцом јава

Разлике између енума и класе

Иако класа и енум имају сличну функционалност у Јава окружењу, они се разликују у неколико аспеката. Размотримо разлике



Енум Класа
Константе набрајања не могу се поништитиКонстанте класе могу бити замењене
Енум не подржава Креирање објекатаКласа подржава стварање предмета
Енум не може проширити друге разредеЧас може продужити друге разреде
набрајање цинтерфејс за применуКласа може да имплементира интерфејс


Практични примери енума

Сада, да бисмо много боље разумели набрајање, извршимо неке практичне примере засноване на следећем.

Дефинисање набрајања у Јави

Енум се може декларисати било у класи или изван цдозволити. Али, то се не може декларисати ни у једном методу. Узмимо мали пример да бисмо разумели његову синтаксу, дефиницију и декларацију.

Синтакса:

име набрајања {константе}

У овом примеру смо прогласили главни() метода у енум

дефиниција пакета јавна класа Едурека {енум Левел {БАЈА, КТМ, ИАМАХА} публиц статиц воид маин (Стринг [] аргс) {Левел миВар = Левел.КТМ Систем.оут.принтлн (миВар)}}

// Оупут

КТМ

У овом примеру, главни() декларисана метода напољу од набрајања.

дефиниција пакета енум Боја {БАЈАЈ, КТМ, ИАМАХА} јавна класа Едурека {публиц статиц воид маин (Стринг [] аргс) {Бике б1 = Цолор.ИАМАХА Систем.оут.принтлн (б1)}}

// излаз:

ИАМАХА

Енум се користи у кућишту прекидача

Набрајање се може користити и у наредби прекидача. Важно је да сви случајеви случаја морају користити константе из истог набрајања које користи наредба свитцх. Проверимо пример заснован на овоме.

Овде ћемо прогласити енум са данима у недељи као његове елементе и проследићемо податке у облику низа за испис података одговарајућег случаја.

пакет промењен енум Дан {НЕДЕЉА, ПОНЕДЕЉАК, УТОРАК, СРЕДА, ЧЕТВРТАК, ПЕТАК, СУБОТА} јавна класа Едурека {Даи даи публиц Едурека (Даи даи) {тхис.даи = даи} публиц воид даиИсЛике () {свитцх (даи) {цасе ПОНЕДЕЉАК: Систем.оут.принтлн ('Здраво, данас је понедељак') случај случаја УТОРАК: Систем.оут.принтлн ('Здраво, данас је уторак') случај случаја СРЕДА: Систем.оут.принтлн ('Здраво, данас је среда ') случај случаја ЧЕТВРТАК: Систем.оут.принтлн (' Здраво, данас је четвртак ') случај случаја ПЕТАК: Систем.оут.принтлн (' Здраво, данас је петак. ') случај случаја СУБОТА: Систем.оут.принтлн (' Здраво, данас је твој викенд ') случај прекида НЕДЕЉА: Систем.оут.принтлн (' Бок, данас је празник ') станка подразумевано: Систем.оут.принтлн (' Унесите важећи дан. ') Бреак}} публиц статиц воид маин (Стринг [] аргс) {Стринг стр = 'ПОНЕДЕЉАК' Едурека е1 = нова Едурека (Даи.валуеОф (стр)) е1.даиИсЛике ()}}

// излаз:

Здраво, данас јеПонедељак

Наслеђивање помоћу енум

У основи, било који енум представљен је као класа која проширује апстрактну класу јава.ланг. Енум и има неколико статичних чланова. Према томе, ан енум не може проширити ниједну другу класу или енум нема вишеструког баштина . Извршимо пример да бисмо га боље разумели.

Овде ћемо наследити ОС на основу произвођача телефона.

наслеђивање пакета увоз јава.утил.АрраиЛист увоз јава.утил.Лист јавна класа Едурека {јавна статичка воид главна (Стринг [] аргс) {Листа наследити = нови АрраиЛист () наследити.адд (ЛибрариЕнум.ФИРСТ) наследити.адд (ЦлиентЕнум. гоогле) за (ХТТПМетходЦонвертибле елемент: наследити) {Систем.оут.принтлн (елемент.гетХТТПМетходТипе ())}} статички интерфејс ХТТПМетходЦонвертибле {публиц Стринг гетХТТПМетходТипе ()} статиц енум ЛибрариЕнум имплементира ХТТПМетходЦонвертибле {ФИРСТ ('Гоогле ПиД') 'Хуавеи'), ТХИРД ('Аппле 11 Про') Стринг хттпМетходТипе ЛибрариЕнум (Стринг пхоне) {хттпМетходТипе = пхоне} публиц Стринг гетХТТПМетходТипе () {ретурн хттпМетходТипе}} статиц енум ЦлиентЕнум имплементира ХТТПМетходЦонвертибле {хуавеи ('ХонгМинг ОС'), аппле ('иОС'), гоогле ('Андроид Оне') Стринг хттпМетходТипе ЦлиентЕнум (Стринг с) {хттпМетходТипе = с} јавни Стринг гетХТТПМетходТипе () {ретурн хттпМетходТипе}}}

// излаз:

Гоогле Пикел
Андроид Оне

Енум са прилагођеним вредностима

Енуми подразумевано имају сопствене вредности низа, енумима такође можемо доделити неке прилагођене вредности. Размотримо пример у наставку.

енум Саобраћај {ЦРВЕНО („СТОП“), НАРАНЧАСТО („ЧЕКАЈ“), ЗЕЛЕНО („ИДИ“)}

У горенаведеном примеру можемо видети да набрајање саобраћаја има три члана. Наиме,

ЦРВЕНА ПОМОРАНЏА и ЗЕЛЕНА са имају своје различите прилагођене вредности СТАЈ, ЧЕКАЈ и ГО редом.

Да бисмо сада користили исти тип набрајања у коду, очекује се да следимо неке тачке које су:

  • Морамо да стварамо параметризовани конструктор за ову енум класу. Јер ми то знамо енум објект класе не може се експлицитно креирати, па за иницијализацију користимо параметарски конструктор.
  • Тхе градитељ не може бити јавност или заштићена коју мора имати приватни или Уобичајено модификатори. Ако креирамо јавни или заштићени, то ће омогућити иницијализацију више од једног објекта који је у потпуности против функционалност набрајања.
  • Морамо створити геттер метод да бисмо добили вредност набрајања.

Извршимо програм заснован на овоме.

пакет промета енум ТраффицСигнал {РЕД ('СТОП'), ЗЕЛЕНИ ('ГО'), ОРАНГЕ ('ВАИТ') приватни Стринг акција јавни Стринг гетАцтион () {ретурн тхис.ацтион} привате ТраффицСигнал (Стринг ацтион) {тхис.ацтион = ацтион}} јавна класа Едурека {публиц статиц воид маин (Стринг аргс []) {ТраффицСигнал [] сигнал = ТраффицСигнал.валуес () фор (ТраффицСигнал сигнал: Сигналс) {Систем.оут.принтлн ('наме:' + сигнал.наме () + 'акција:' + сигнал.гетАцтион ())}}}

// излаз:

име: ЦРВЕНА акција: СТОП
име: ЗЕЛЕНА акција: ИДИ
Мушкие: НАРАНЧАСТА акција: ЧЕКАЈ

Наброји у иф-елсе-иф изјавама

Извршимо сада програм заснован на енум у иф-елсе-иф изјавама. Овде ћемо пронаћи смер кретања преношењем вредности упутстава доступних у набрајању.

пакет Дирецтионс енум Дирецтионс {ЕАСТ, ВЕСТ, НОРТХ, СОУТХ} јавна класа Едурека {публиц статиц воид маин (Стринг аргс []) {Дирецтионс дир = Дирецтионс.НОРТХ иф (дир == Дирецтионс.ЕАСТ) {Систем.оут.принтлн ( 'Дирецтион: Еаст')} елсе иф (дир == Дирецтионс.ВЕСТ) {Систем.оут.принтлн ('Дирецтион: Вест')} елсе иф (дир == Дирецтионс.НОРТХ) {Систем.оут.принтлн ('Дирецтион : Нортх ')} елсе {Систем.оут.принтлн (' Смер: Југ ')}}}

// излаз:

Рецицион: Север

Различите методе које се користе са енумом

Вредности (): Када креирате набрајање, Јава цомпилер интерно додаје вредности () метода. Ова метода враћа низ који садржи све вредности набрајања.

// Синтакса:

јавне статичке енум-типе [] вредности ()

Открићемо вредност индекса одређеног елемента у низу.

вредности пакета енум Боја {ЦРВЕНА, ЗЕЛЕНА, ПЛАВА} јавна класа Едурека {јавна статичка воид главна (Стринг [] аргс) {Цолор арр [] = Цолор.валуес () за (Цолор цол: арр) {Систем.оут.принтлн ( цол + 'ат индек' + цол.ординал ())} Систем.оут.принтлн (Цолор.валуеОф ('РЕД'))}}

// излаз:

како тестирати базу података

ЦРВЕНА на индексу 0
ЗЕЛЕНО код индекса 1
ПЛАВО код индекса 2
НЕТ

Вредност(): Овометода се користи за враћање константе набрајања чија је вредност једнака прослеђена као аргумент приликом позива ове методе.

// Синтакса:

јавна статичка вредност типа енум (Стринг стр)

Овде ћемо пронаћи трошкове одређеног телефона на основу уноса који проследимо у низ.

вредности пакета енум Мобиле {Самсунг (1099), Аппле (1250), Гоогле (1325) инт прице Мобиле (инт п) {прице = п} инт сховПрице () {ретурн прице}} јавна класа Едурека {публиц статиц воид маин (Стринг аргс []) {Систем.оут.принтлн ('Листа мобилних телефона:') за (Мобиле м: Мобиле.валуес ()) {Систем.оут.принтлн (м + 'трошкови' + м.сховПрице () + 'долара' )} Мобиле рет рет = Мобиле.валуеОф ('Самсунг') Систем.оут.принтлн ('Селецтед:' + рет)}}

// излаз:

Самсунг кошта 1099 долара
Аппле кошта 1250 долара
Гоогле кошта 1325 долара
Изабрано: Самсунг

Редни (): Јава интерпретер додаје редни () метода интерно када креира енум. Метода ординал () враћа индекс вредности набрајања.

// Синтакса:

јавни завршни редни ()

Овде ћемо сазнати вредност индекса одређеног елемента у низу. а такође и положај плода трешње.

Пакет редни енум Воће {Аппле, Банана, Цхерри, Дате, Елдерберри} енум Поврће {шаргарепа, цвекла, пасуљ, парадајз, лук} јавна класа Едурека {публиц статиц воид маин (Стринг [] аргс) {Фруитс [] фру = Воће. вредности () за (Воће фр: фру) {Систем.оут.принтлн (фр + ':' + фр.ординал ())} Воће ф1, ф2, ф3 ф1 = Воће.Аппле ф2 = Воће.Чешња ф3 = Воће.Јабука иф (ф2.цомпареТо (ф1)> 0) {Систем.оут.принтлн (ф2 + 'долази иза' + ф1)} Поврће в1 = Поврће.Беетроот иф (ф1.екуалс (в1)) {Систем.оут.принтлн (' Неисправан') } } }

// излаз:

Аппле: 0
Банана: 1
Вишња: 2
Датум: 3
Базга: 4
Вишња долази после Аппле-а

Предности Енум-а

  • Енум у Јави се побољшава врста безбедности
  • Енум је дизајниран да буде лако употребљив у преклопници
  • Енум може бити прешао
  • Енум може имати поља, методе, и конструктори
  • Енум може да примени интерфејси
  • Енум не може да прошири а класа јер се изнутра протеже Енум класа

Енум Усецасе: Роцк, Папер, Сциссорс Гаме

Користићемо енум на Јави да креирамо нашу игру из детињства, камени (камени) папир и маказе . Следећи код објашњава како.

пакет Едурека импорт јава.утил.Рандом импорт јава.утил.Сцаннер енум ХандСигн {СЦИССОР, ПАПЕР, СТОНЕ} јавна класа СПС {публиц статиц воид маин (Стринг [] аргс) {Рандом рандом = нев Рандом () боолеан гамеОвер = фалсе ХандСигн плаиерМове = ХандСигн.СЦИССОР ХандСигн цомпутерМове инт нумТриалс = 0 инт нумЦомпутерВон = 0 инт нумПлаиерВон = 0 инт нумТие = 0 Скенер у = нови скенер (Систем.ин) Систем.оут.принтлн ('нПочнимо ... н'), док (! гамеОвер) {Систем.оут.принтф ('% нСциссор-Папер-Стонен') боолеан валидИнпут до {Систем.оут.принт ('нВаш ред (Молимо унесите с за маказе, п за папир, т за камен, к да напустите): н ') цхар инЦхар = ин.нект (). тоЛоверЦасе (). цхарАт (0) валидИнпут = труе иф (инЦхар ==' к ') {гамеОвер = труе} елсе иф (инЦхар ==' с ' ) {плаиерМове = ХандСигн.СЦИССОР} елсе иф (инЦхар == 'п') {плаиерМове = ХандСигн.ПАПЕР} елсе иф (инЦхар == 'т') {плаиерМове = ХандСигн.СТОНЕ} елсе {Систем.оут.принтлн ( 'нПроверите унос и покушајте поново! н') валидИнпут = фалсе}} вхиле (! вал идИнпут) иф (! гамеОвер) {инт аРандомНумбер = рандом.нектИнт (3) иф (аРандомНумбер == 0) {цомпутерМове = ХандСигн.СЦИССОР Систем.оут.принтлн ('нИс мој ред: СЦИССОРн')} елсе иф (аРандомНумбер = = 0) {ЦомпутерМове = ХандСигн.ПАПЕР Систем.оут.принтлн ('нИс мој ред: ПАПЕРн')} елсе {цомпутерМове = ХандСигн.СТОНЕ Систем.оут.принтлн ('нИс мој ред: СТОНЕн')} иф (цомпутерМове = = плаиерМове) {Систем.оут.принтлн ('нИт ис а Тие! н') ++ нумТие} елсе иф (цомпутерМове == ХандСигн.СЦИССОР & амп & амп плаиерМове == ХандСигн.ПАПЕР) {Систем.оут.принтлн ('нСциссор сече папир , Победио сам! Н ') ++ нумЦомпутерВон} иначе ако (цомпутерМове == ХандСигн.ПАПЕР & амп & амп плаиерМове == ХандСигн.СТОНЕ) {Систем.оут.принтлн (' нПапер умотава камен, победио сам! Н ') ++ нумЦомпутерВон} иначе ако (цомпутерМове == ХандСигн.СТОНЕ & амп & амп плаиер & амп амп & амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; амп; плаиер плаиер; ..! Победили сте! Н ') ++ нумПлаиерВон} ++ нумТриалс}} Систем.оут.принтф ('% нБрој проба: '+ нумТриалс) Систем.оут.принтф (' Победио сам% д (%. 2ф %%) . Освојили сте% д (%. 2ф %%).% Н ', нумЦомпутерВон, 100.0 * нумЦомпутерВон / нумТриалс, нумПлаиерВон, 100.0 * нумПлаиерВон / нумТриалс) Систем.оут.принтлн (' Жао! Надам се да сте уживали ..! ' )}}

// излаз:

Почнимо...
Маказе-папир-камен
Ваш ред (Унесите с за маказе, п за папир, т за камен, к за напуштање):
с
На мени је ред: КАМЕН
Камен ломи маказе, победио сам!
Маказе-папир-камен
Ваш ред (Унесите с за маказе, п за папир, т за камен, к за напуштање):
Шта
Број суђења: 1И добио сам 1 (100,00%). Освојили сте 0 (0,00%).
Ћао !, надам се да сте уживали ..!

Овим смо дошли до краја овог водича за Јава Енум. Надам се да сте разумели Енум у Јави и његову примену кроз неке примере у стварном времену.

Сад кад сте разумели енум основе кроз овај „Јава Енум Туториал“ погледајте Едурека, поуздана компанија за учење на мрежи са мрежом од више од 250.000 задовољних ученика раширених широм света. Едурекини курсеви за обуку и сертификацију Јава Ј2ЕЕ и СОА дизајнирани су за студенте и професионалце који желе да буду Јава програмери. Курс је дизајниран да вам пружи почетну предност у Јава програмирању и обучи вас за основне и напредне Јава концепте, заједно са разним Јава оквирима као што су Хибернате & Пролеће .

Имате питање за нас? Спомените то у одељку за коментаре овог блога „Јава Енум Туториал“ и јавићемо вам се што је пре могуће.