Java Enum Tutorial: Ano ito at Paano ito ipapatupad?



Ang artikulong ito sa Java Enum Tutorial ay magbibigay sa iyo ng isang detalyadong kaalaman sa Enum Constants kasama ang mga praktikal na halimbawa para sa isang mas mahusay na pag-unawa.

Ang Enumerasyon sa ay isang paraan ng pagtukoy sa isang klase na may mga nakapirming at pinangalanan na mga pare-pareho sa kani-kanilang mga gamit ang keyword enum Dito sa ' Java Enum Tutorial 'Artikulo, matutunan natin natukuyin ang Enumeration kasama angmga halimbawa para sa isang mas mahusay na pag-unawa.

Ano ang Enumerasyon?

Java Enums ay mga klase na mayroong isang nakapirming hanay ng mga Constant o variable na hindi madalas na baguhin. Ang enumerasyon sa Java ay nakamit gamit ang keyword enum Ang Java enum pare-pareho ay static at panghuli implicitly. Ang tampok na Enum ay magagamit mula noon JDK bersyon 1.5.





Bakit kailangan natin ng Enumerasyon?

enum nagpapabuti sa kaligtasan ng uri sa pag-check ng compile-time upang maiwasan ang mga error sa run-time sa pamamagitan ng pag-iwas sa boilerplate code. Halimbawa, kung kailangan mong pumili ng isang posibilidad mula sa pinakamaliit na bilang ng mga magagamit na pagpipilian, sabihin mong,

Trabaho Uri: (Kontrata / Pansamantala / Permanent)



Empleyado ng tutorial sa Java enum

Pagkatapos ang pinakamahusay na pagpipilian ay ang paggamit ng isang enum Kasi enum ay maaaring madaling gamitin sa switch. enum maaaring daanan. enum maaari mayroon mga patlang, tagapagbuo at pamamaraan. Dahil dito, pinapataas nito ang pag-check ng compile-time at iniiwasan ang mga pagkakamali dahil sa pagpasa sa mga hindi wastong konstanta, dahil naitala mo na ang dokumentasyon kung aling mga halaga ang ligal na magagamit.

Mga Pagkakaiba sa pagitan ng Enum at Klase

Kahit na ang isang klase at enum ay may katulad na pag-andar sa kapaligiran sa Java, magkakaiba sila sa ilang mga aspeto. Talakayin natin ang mga pagkakaiba



Enum Klase
Ang mga Enam Constant ay hindi maaaring ma-overrideMaaaring mapailalim ang mga pare-pareho sa klase
Hindi sinusuportahan ng Enum ang Paglikha ng Mga BagaySinusuportahan ng klase ang Paglikha ng Mga Bagay
Hindi maaaring pahabain ng Enum ang iba pang mga klaseAng isang klase ay maaaring magpalawak ng iba pang mga klase
enum cisang ipatupad InterfaceMaaaring ipatupad ng isang klase ang Interface


Praktikal na Mga Halimbawa ng Enum

Ngayon, upang maunawaan ang enum sa isang mas mahusay na paraan, magpatupad tayo ng ilang mga praktikal na halimbawa batay sa sumusunod.

Pagtukoy sa Enumerasyon sa Java

Ang enum ay maaaring ideklara alinman sa loob ng isang klase o sa labas ng chayaan. Ngunit, hindi ito maaaring ideklara sa loob ng anumang pamamaraan. Kumuha tayo ng isang maliit na halimbawa upang maunawaan ang syntax, kahulugan, at deklarasyon nito.

Syntax:

pangalan ng enum na {Constants}

Sa halimbawang ito, idineklara namin ang pangunahing () paraan sa loob enum

kahulugan ng package pampublikong klase Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

java doble sa int bilog

KTM

Sa halimbawang ito, ang pangunahing () idineklara ang pamamaraan sa labas ng enum

kahulugan ng package enum Kulay {BAJAJ, KTM, YAMAHA} pampublikong klase Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

// Output:

YAMAHA

Ginamit ang Enum sa Switch Case

Ang pagpapatala ay maaaring magamit sa isang switch statement pati na rin. Mahalaga na ang lahat ng mga pahayag ng kaso ay dapat gumamit ng mga pare-pareho mula sa parehong enum tulad ng ginamit ng switch statement. Suriin natin ang isang halimbawa batay dito.

Dito, idedeklara namin ang isang enum na may mga araw ng linggo bilang mga elemento nito at ipapasa namin ang data sa anyo ng isang string upang mai-print ang data ng katugmang kaso.

lumipat ang package ng enum Araw {Linggo, Lunes, LABAS, Miyerkules, THURSDAY, FRIDAY, SATURDAY} pampublikong klase Edureka {Day day public Edureka (Day day) {this.day = day} public void dayIsLike () {switch (day) {case LUNES: System.out.println ('Kumusta, Ngayon ay Lunes') break case TUESDAY: System.out.println ('Kumusta, Ngayon ay Martes') kaso ng break WEDNESDAY: System.out.println ('Kumusta, Ngayon ay Miyerkules ') break case THURSDAY: System.out.println (' Kumusta, Ngayon ay Huwebes ') break case FRIDAY: System.out.println (' Hello, Ngayon ay Biyernes. ') break case SATURDAY: System.out.println (' Kumusta, Ngayon ang iyong Weekend ') break case LINGGO: System.out.println (' Hi, Today is a Holiday ') break default: System.out.println (' Mangyaring maglagay ng wastong araw. ') Break}} pampublikong static void main (String [] args) {String str = 'MONDAY' Edureka e1 = bagong Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// Output:

Kumusta, Ngayon naLunes

Mana na gumagamit ng enum

Talaga, anuman enum ay kinakatawan bilang isang klase na nagpapalawak ng abstract class na java.lang. Enum at mayroong maraming mga static na kasapi. Samakatuwid, isang enum hindi maaaring pahabain ang anumang iba pang klase o enum walang maramihang mga mana . Magpatupad tayo ng isang halimbawa upang maunawaan ito sa isang mas mahusay na paraan.

Dito, mamanahin namin ang OS batay sa gumagawa ng telepono.

package inherit 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) para sa (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} static interface HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum nagpapatupad ng HTTPMethodConvertible {UNA ('Google Pixel'), ipinatupad ng static enum LibraryEnum na HTTPMethodConvertible {UNA ('Google Pixel'), 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum nagpapatupad ng HTTPMethodConvertible {huawei ('appleMing OS'), ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

// Output:

Google Pixel
Android One

Enum na may na-customize na mga halaga

Ang mga enum ay may kani-kanilang mga halaga ng string bilang default, maaari rin kaming magtalaga ng ilang mga pasadyang halaga sa mga enum. Isaalang-alang natin ang halimbawa sa ibaba.

enum Trapiko {PULA ('TIGIL'), ORANGE ('Hintay'), GREEN ('PUMUNTA')}

Sa halimbawa sa itaas, makikita natin na ang Traffic enum ay mayroong tatlong miyembro. Namely,

PULA, ORANGE at GREEN na may kanya-kanyang iba't ibang mga pasadyang halaga TIGIL, MAGHintay at GO na ayon sa pagkakabanggit.

Ngayon upang magamit ang parehong uri ng enum sa code inaasahan naming sundin ang ilang mga puntos na:

  • Kailangan nating lumikha parameterized tagapagbuo para sa enum class na ito. Kasi alam natin yun enum ang object ng klase ay hindi maaaring likhain nang malikha kaya para sa pagsisimula ay gumagamit kami ng parameterized konstruktor.
  • Ang tagabuo hindi maaaring maging publiko o protektadong dapat mayroon ito pribado o default nagbabago. Kung lumikha kami ng pampubliko o protektado, papayagan nitong simulan ang higit sa isang mga bagay na lubos na laban pagpapaandar ng enum.
  • Kailangan naming lumikha ng isang paraan ng pagkuha ng kuha upang makuha ang halaga ng enums

Ipatupad natin ang isang programa batay dito.

package traffic enum TrafficSignal {RED ('STOP'), GREEN ('GO'), ORANGE ('WAIT') private String action public String getAction () {ibalik ito.action} pribadong TrafficSignal (String action) {this.action = aksyon}} pampublikong klase Edureka {public static void main (String args []) {TrafficSignal [] signal = TrafficSignal.values ​​() para sa (TrafficSignal signal: signal) {System.out.println ('name:' + signal.name () + 'aksyon:' + signal.getAction ())}}}

// Output:

pangalan: PULANG aksyon: TIGIL
pangalan: GREEN action: GO
lalakie: ORANGE pagkilos: maghintay

Enum sa kung-saan-kung mga pahayag

Ngayon, magpatupad tayo ng isang programa batay sa enum sa kung-saan-kung pahayag. Dito, mahahanap namin ang direksyon ng traversal sa pamamagitan ng pagpasa ng mga halaga ng mga direksyon na magagamit sa enum.

package Mga Direksyon enum Mga Direksyon {EAST, WEST, NORTH, SOUTH} pampublikong klase Edureka {public static void main (String args []) {Direksyon dir = Mga Direksyon.NORTH kung (dir == Mga Direksyon.EAST) {System.out.println ( 'Direksyon: Silangan')} iba pa kung (dir == Direksyon.WEST) {System.out.println ('Direksyon: West')} iba pa kung (dir == Direksyon.NORTH) {System.out.println ('Direksyon : North ')} iba pa {System.out.println (' Direksyon: Timog ')}}}

// Output:

Sabihin moction: Hilaga

Iba't ibang pamamaraan na ginamit sa enum

Mga Halaga (): Kapag lumikha ka ng isang enum, ang Tagatala ng Java panloob na nagdaragdag ng halaga () paraan Ang pamamaraang ito ay nagbabalik ng isang array naglalaman ng lahat ng mga halaga ng enum.

// Syntax:

mga halaga ng pampublikong static enum-type [] ()

Malalaman natin ang halaga ng index ng isang partikular na elemento sa isang array.

mga halaga ng package enum Kulay {RED, GREEN, BLUE} pampublikong klase Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() para sa (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

// Output:

PULA sa index 0
GREEN sa index 1
BLUE sa index 2
NET

ValueOf (): Itoginagamit ang paraan upang maibalik ang pare-pareho ng bilang na ang halaga ay katumbas ng naipasa bilang isang argumento habang tinawag ang pamamaraang ito.

// Syntax:

pampublikong statik na enum-type na halaga ngOf (String str)

Dito, mahahanap namin ang gastos ng isang partikular na telepono batay sa input na ipinapasa namin sa string.

halaga ng package ng enum Mobile {Samsung (1099), Apple (1250), Google (1325) int presyo Mobile (int p) {presyo = p} int showPrice () {presyo ng pagbalik}} pampublikong klase Edureka {public static void main (String args []) {System.out.println ('Listahan ng CellPhone:') para sa (Mobile m: Mobile.values ​​()) {System.out.println (m + 'mga gastos' + m.showPrice () + 'dolyar' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Napili:' + ret)}}

// Output:

Ang Samsung ay nagkakahalaga ng 1099 dolyar
Ang Apple ay nagkakahalaga ng 1250 dolyar
Nagkakahalaga ang Google ng 1325 dolyar
Napili: Samsung

Ordinal (): Ang tagasalin ng Java ay nagdaragdag ng ordinal () pamamaraan sa loob kapag lumilikha ito ng enum Ang ordinal () na pamamaraan ay nagbabalik ng indeks ng halaga ng enum.

// Syntax:

pangwakas na pang-publiko na int ordinal ()

Dito, malalaman natin ang halaga ng index ng isang partikular na elemento sa isang array. at gayundin, ang posisyon ng prutas ng seresa.

Package ordinal enum Mga Prutas {Apple, Saging, Cherry, Petsa, Elderberry} enum Mga Gulay {Carrot, Beetroot, Beans, Tomato, Onion} pampublikong klase Edureka {public static void main (String [] args) {Fruits [] fru = Fruits = Prutas. mga halaga () para sa (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Mga prutas f1, f2, f3 f1 = Mga Prutas. Apple f2 = Mga Prutas .Cryry f3 = Mga Prutas .Apple kung (f2.compareTo (f1)> 0) {System.out.println (f2 + 'ay dumating pagkatapos' + f1)} Mga gulay v1 = Mga Gulay. Beetroot kung (f1.equals (v1)) {System.out.println (' Maling ')}}}

// Output:

Apple: 0
Saging: 1
Cherry: 2
Petsa: 3
Elderberry: 4
Sumunod si Cherry kay Apple

Mga kalamangan ng Enum

  • Ang Enum sa Java ay nagpapabuti uri ng kaligtasan
  • Ang Enum ay idinisenyo upang madaling magamit sa lumipat ng mga kaso
  • Enum ay maaaring binagtas
  • Enum maaaring magkaroon mga patlang, pamamaraan, at tagapagtayo
  • Maaaring ipatupad ng Enum mga interface
  • Hindi maaaring pahabain ng Enum a klase kasi panloob, lumalawak Enum klase

Enum Usecase: Laro sa Rock, Papel, Gunting

Gagamitin natin enum sa Java upang likhain ang aming laro sa pagkabata, ang bato (bato) na papel at gunting . Ipinapaliwanag ng sumusunod na code kung paano.

package Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, BATO} pampublikong klase 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 = bagong Scanner (System.in) System.out.println ('nMagsimula tayo ... n') habang (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput gawin {System.out.print ('n Ang iyong pagliko (Mangyaring Ipasok ang s para sa isang gunting, p para sa papel, t para sa bato, q to quit): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} iba kung (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} iba pa kung (inChar == 'p') {playerMove = HandSign.PAPER} iba pa kung (inChar == 't') {playerMove = HandSign.STONE} iba pa {System.out.println ( 'nPaki-check ang input at subukang muli! n') validInput = false}} habang (! val idInput) kung (! gameOver) {int aRandomNumber = random.nextInt (3) kung (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('Nako Ito: SCISSORn')} iba pa kung (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('Nasa Akin na: PAPERn')} iba pa {computerMove = HandSign.STONE System.out.println ('Nako Ito: STONEn')} kung (computerMove = = playerMove) {System.out.println ('nIto ay Tie! n') ++ numTie} iba pa kung (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor ay nagbabawas ng papel , Nanalo ako! N ') ++ numComputerWon} iba pa kung (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper balot ng bato, nanalo ako! N ') ++ numComputerWon} kung hindi man kung (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone break scissor, nanalo ako! n') ++ numComputerWon} iba pa {System.out.println ('nCong congratulate. ..! Nanalo ka! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nAng bilang ng mga pagsubok: '+ numTrials) System.out.printf (' Nanalo ako ng% d (%. 2f %%) . Nanalo ka ng% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Bye !, Sana nasiyahan ka ..! ' )}}

// Output:

Tayo na't magsimula...
Scissor-Paper-Stone
Ang iyong tira (Mangyaring Ipasok ang s para sa isang gunting, p para sa papel, t para sa bato, q upang umalis):
s
Akin na: Bato
Pinutol ng bato ang gunting, nanalo ako!
Scissor-Paper-Stone
Ang iyong tira (Mangyaring Ipasok ang s para sa isang gunting, p para sa papel, t para sa bato, q upang umalis):
Ano
Ang bilang ng mga pagsubok: 1 Nanalo ako ng 1 (100.00%). Nanalo ka ng 0 (0.00%).
Bye !, Sana nasiyahan ka ..!

Sa pamamagitan nito, natapos na namin ang Java Enum Tutorial na ito. Inaasahan kong naunawaan mo ang Enum sa Java at ang pagpapatupad nito sa pamamagitan ng ilang mga halimbawa ng real-time.

Ngayon na naintindihan mo enum mga pangunahing kaalaman sa pamamagitan ng 'Java Enum Tutorial' na tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang mga kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo para sa mga mag-aaral at propesyonal na nais na maging isang Java Developer. Ang kurso ay dinisenyo upang bigyan ka ng isang panimula sa pag-program ng Java at sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang mga balangkas ng Java tulad ng Hibernate & Spring .

May tanong ba sa amin? Nabanggit ito sa seksyon ng mga komento ng blog na 'Java Enum Tutorial' at babalikan ka namin sa lalong madaling panahon.