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?
- Bakit kailangan natin ng Enumerasyon?
- Mga Pagkakaiba sa pagitan ng Enum at Klase
- Praktikal na Mga Halimbawa ng Enum
- Mga kalamangan ng Enum
- Enum Usecase: Rock, Papel, Laro sa Gunting
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)
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-override | Maaaring mapailalim ang mga pare-pareho sa klase |
Hindi sinusuportahan ng Enum ang Paglikha ng Mga Bagay | Sinusuportahan ng klase ang Paglikha ng Mga Bagay |
Hindi maaaring pahabain ng Enum ang iba pang mga klase | Ang isang klase ay maaaring magpalawak ng iba pang mga klase |
enum cisang ipatupad Interface | Maaaring 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
- Ginamit ang Enum sa Switch Case
- Mana na gumagamit ng enum
- Enum na may na-customize na mga halaga
- Enum sa kung-saan-kung mga pahayag
- Iba't ibang pamamaraan na ginamit sa enum
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.