Vodič za Java Enum: Što je to i kako ga implementirati?

Ovaj članak o Java Enum Tutorialu pružit će vam detaljno znanje o Enumovim konstantama, zajedno sa praktičnim primjerima za bolje razumijevanje.

The Popisivanje u je način definiranja klase s fiksnim i imenovanim konstantama s njihovim odgovarajućim pomoću ključne riječi nabrajanje. U ovom “ Vodič za Java Enum ”, Naučit ćemodefinirati nabrajanje zajedno saprimjeri za bolje razumijevanje.

Što je popisivanje?

Java Enums su klase koje imaju fiksni skup konstanti ili varijabli koje se ne mijenjaju. Nabrajanje u Javi postiže se pomoću ključne riječi nabrajanje. Java nabrajanje konstante su statički i konačni implicitno. Značajka Enum dostupna je od JDK verzija 1.5.





Zašto nam treba popisivanje?

nabrajanje poboljšava sigurnost tipa prilikom provjere vremena kompajliranja kako bi se izbjegle pogreške u toku izvođenja izbjegavanjem koda uzorka. Na primjer, ako morate odabrati najmanju mogućnost od najmanje dostupnih opcija, recimo,

Posao Tip: (Ugovor / Privremeni / Stalno)



Zaposlenik udžbenika Java enum

Tada bi najbolja opcija bila upotreba nabrajanje. Jer nabrajanje može se lako koristiti u prekidaču. nabrajanje može se preći. nabrajanje limenka imati polja, konstruktori i metode. Stoga, povećava provjeru vremena kompajliranja i izbjegava pogreške zbog unošenja nevažećih konstanti, jer ste već dokumentirali koje su vrijednosti legalne za upotrebu.

Razlike između enuma i klase

Iako klasa i enum imaju sličnu funkcionalnost u Java okruženju, razlikuju se u nekoliko aspekata. Razgovarajmo o razlikama



Enum Razred
Ne može se nadjačati enumske konstanteKonstante razreda mogu se nadjačati
Enum ne podržava Stvaranje objekataRazred podupire Stvaranje predmeta
Enum ne može produžiti druge razredeRazred može proširiti druge razrede
nabrajati csučelje za provedbuKlasa može implementirati sučelje


Praktični primjeri Enuma

Sada, da bismo puno bolje razumjeli nabrajanje, izvršimo nekoliko praktičnih primjera na temelju sljedećeg.

Definiranje nabrajanja u Javi

Enum se može deklarirati unutar klase ili izvan cneka. Ali, to se ne može deklarirati ni u jednoj metodi. Uzmimo mali primjer da bismo razumjeli njegovu sintaksu, definiciju i deklaraciju.

Sintaksa:

ime nabrajanja {konstante}

U ovom smo primjeru proglasili glavni() metoda iznutra nabrajanje

definicija paketa javna klasa Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Izlazak

što je logger u javi

KTM

U ovom primjeru, glavni() deklarirana metoda izvana od nabrajanja.

definicija paketa enum Boja {BAJAJ, KTM, YAMAHA} javna klasa Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//Izlaz:

YAMAHA

Enum korišten u kućištu prekidača

Nabrajanje se može koristiti i u naredbi prekidača. Važno je da svi izrazi slučaja moraju koristiti konstante iz istog nabrajanja kao što ih koristi naredba switch. Provjerimo primjer temeljen na ovome.

Ovdje ćemo proglasiti enum s danima u tjednu kao njegove elemente i proslijedit ćemo podatke u obliku niza za ispis podataka odgovarajućeg slučaja.

paket prebačen enum Dan {NEDJELJA, PONEDJELJAK, UTORAK, SRIJEDA, ČETVRTAK, PETAK, SUBOTA} javni razred Edureka {Dan dan javni Edureka (Dan dan) {this.day = day} public void dayIsLike () {switch (day) {case PONEDJELJAK: System.out.println ('Bok, danas je ponedjeljak') slučaj slučaja UTORAK: System.out.println ('Bok, danas je utorak') slučaj case SRIJEDA: System.out.println ('Bok, danas je srijeda ') slučaj slučaja ČETVRTAK: System.out.println (' Bok, danas je četvrtak ') slučaj slučaja PETAK: System.out.println (' Pozdrav, danas je petak. ') slučaj slučaja SUBOTA: System.out.println (' Bok, danas je tvoj vikend ') slučaj prekida NEDJELJA: System.out.println (' Bok, danas je praznik ') stanka zadana: System.out.println (' Unesite važeći dan. ') Break}} public static void main (String [] args) {String str = 'PONEDJELJAK' Edureka e1 = nova Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Izlaz:

Bok, danas jeponedjeljak

Nasljeđivanje pomoću enum

U osnovi, bilo koji nabrajanje predstavljen je kao klasa koja proširuje apstraktnu klasu java.lang. Enum i ima nekoliko statičnih članova. Stoga je an nabrajanje ne može proširiti nijednu drugu klasu ili nabrajanje nema višestrukog baština . Izvršimo primjer kako bismo ga bolje razumjeli.

Ovdje ćemo naslijediti OS na temelju proizvođača telefona.

razlika između xml i html
nasljeđivanje paketa uvoz java.util.ArrayList uvoz java.util.List javna klasa Edureka {javna statička void glavna (String [] args) {Lista naslediti = novi ArrayList () naslediti.add (LibraryEnum.FIRST) naslediti.add (ClientEnum. google) za (HTTPMethodConvertible element: naslediti) {System.out.println (element.getHTTPMethodType ())}} statičko sučelje HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum implementira HTTPMethodConvertible {FIRST ('Google Pixel'), 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum implementira HTTPMethodConvertible {huawei ('HongMing OS'), apple ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} javni String getHTTPMethodType () {return httpMethodType}}}

//Izlaz:

Google Pixel
Android One

Enum s prilagođenim vrijednostima

Enumi prema zadanim postavkama imaju vlastite vrijednosti nizova, enumima također možemo dodijeliti neke prilagođene vrijednosti. Razmotrimo donji primjer.

enum Promet {CRVENO (“STOP”), NARANČASTO (“ČEKAJ”), ZELENO (“IDI”)}

U gornjem primjeru možemo vidjeti da prometna enum ima tri člana. Naime,

CRVENA, NARANČASTA i ZELENA s imaju svoje različite prilagođene vrijednosti STAJ, ČEKAJ i IĆI odnosno.

Da bismo sada koristili isti tip enum u kodu, očekuje se da slijedimo neke točke koje su:

  • Moramo stvarati parametarski konstruktor za ovaj enum razred. Jer mi to znamo nabrajanje objekt klase ne može se eksplicitno kreirati, pa za inicijalizaciju koristimo parametarski konstruktor.
  • The graditelj ne može biti javnost ili zaštićena koju mora imati privatni ili zadano modifikatori. Ako stvorimo javni ili zaštićeni, to će omogućiti inicijalizaciju više od jednog objekta koji je u potpunosti protiv enum funkcionalnost.
  • Moramo stvoriti getter metodu da bismo dobili vrijednost od nabrajanja.

Izvršimo program zasnovan na ovome.

paket prometa enum TrafficSignal {CRVENO ('STOP'), ZELENO ('GO'), ORANGE ('WAIT') privatna akcija String javna String getAction () {return this.action} private TrafficSignal (akcija niza) {this.action = akcija}} javna klasa Edureka {javna statička void glavna (String args []) {TrafficSignal [] signali = TrafficSignal.values ​​() za (TrafficSignal signal: signali) {System.out.println ('name:' + signal.name () + 'akcija:' + signal.getAction ())}}}

//Izlaz:

naziv: CRVENA akcija: STOP
naziv: ZELENA akcija: IDI
muškie: NARANČASTA akcija: ČEKAJ

Nabroji u if-else-if izjavama

Izvršimo sada program temeljen na enum u if-else-if izjavama. Ovdje ćemo pronaći smjer zaokreta prenošenjem vrijednosti uputa dostupnih u nabrajanju.

paket Directions enum Smjerovi {EAST, WEST, NORTH, SOUTH} javna klasa Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Smjer: Istok')} else if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Smjer : Sjever ')} else {System.out.println (' Smjer: Jug ')}}}

//Izlaz:

Rećiktion: Sjever

Različite metode korištene s enumom

Vrijednosti (): Kada stvorite nabrajanje, Java kompajler interno dodaje vrijednosti () metoda. Ova metoda vraća niz koji sadrži sve vrijednosti nabrajanja.

//Sintaksa:

javne statičke vrijednosti tipa enum [] ()

Saznat ćemo vrijednost indeksa određenog elementa u nizu.

vrijednosti paketa enum Boja {CRVENA, ZELENA, PLAVA} javna klasa Edureka {javna statička void glavna (String [] args) {Color arr [] = Color.values ​​() za (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('CRVENA'))}}

//Izlaz:

CRVENA na indeksu 0
ZELENA u indeksu 1
PLAVO kod indeksa 2
NETO

Vrijednost(): Ovajmetoda koristi se za vraćanje konstante nabrajanja čija je vrijednost jednaka prošao kao argument tijekom poziva ove metode.

//Sintaksa:

javna statička vrijednost tipa enum (String str)

Ovdje ćemo pronaći cijenu određenog telefona na temelju unosa koji prosljeđujemo u niz.

vrijednosti paketa enum Mobile {Samsung (1099), Apple (1250), Google (1325) int cijena Mobile (int p) {price = p} int showPrice () {return price}} javna klasa Edureka {public static void main (String args []) {System.out.println ('Popis mobitela:') za (Mobile m: Mobile.values ​​()) {System.out.println (m + 'troškovi' + m.showPrice () + 'dolara' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Odabrano:' + ret)}}

//Izlaz:

Samsung košta 1099 dolara
Apple košta 1250 dolara
Google košta 1325 dolara
Odabrano: Samsung

Redni(): Java interpreter dodaje redni() metoda interno kada kreira nabrajanje. Metoda ordinal () vraća indeks vrijednosti nabrajanja.

//Sintaksa:

javni konačni interni ()

Ovdje ćemo saznati vrijednost indeksa određenog elementa u nizu. a također i položaj ploda trešnje.

Paket redni enum Voće {Apple, Banana, Cherry, Date, Elderberry} enum Povrće {mrkva, cikla, grah, rajčica, luk} javna klasa Edureka {public static void main (String [] args) {Voće [] fru = Voće. vrijednosti () za (Voće fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Voće f1, f2, f3 f1 = Voće.Jabuka f2 = Voće.Češnja f3 = Voće.Jabuka if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'dolazi iza' + f1)} Povrće v1 = Povrće.Beetroot if (f1.equals (v1)) {System.out.println (' Netočno') } } }

//Izlaz:

Jabuka: 0
Banana: 1
Trešnja: 2
Datum: 3
Bazga: 4
Trešnja dolazi nakon Applea

Prednosti Enuma

  • Enum u Javi se poboljšava vrsta sigurnosti
  • Enum je dizajniran da se lako koristi u preklopna kućišta
  • Enum može biti prešao
  • Enum može imati polja, metode, i konstruktori
  • Enum može implementirati sučelja
  • Enum ne može proširiti a razred jer se iznutra proteže Enum razred

Enum Usecase: Rock, Paper, Škare igra

Koristit ćemo nabrajanje na Javi kako bismo stvorili našu igru ​​iz djetinjstva, kameni (kameni) papir i škare . Sljedeći kod objašnjava kako.

datum tipa podataka u primjeru sql
paket Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} javna klasa 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 Skener u = novi skener (System.in) System.out.println ('nPočnimo ... n'), dok (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nVaš red (Molimo unesite s za škare, p za papir, t za kamen, q za prekid): 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 ( 'nProvjerite unos i pokušajte ponovo! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIs moj red: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIs moj red: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIs moj red: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt is a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nNcisica reže papir , Pobijedio sam! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper omotava kamen, pobijedio sam! N ') ++ numComputerWon} inače ako (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone lomi škare, pobijedio sam! n') ++ numComputerWon} else {System.out.println ('nČestitamo. ..! Pobijedili ste! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nBroj proba: '+ numTrials) System.out.printf (' Pobijedio sam% d (%. 2f %%) . Osvojili ste% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Zbogom, nadam se da ste uživali ..! ' )}}

//Izlaz:

Počnimo ...
Makaze-papir-kamen
Vaš red (Unesite s za škare, p za papir, t za kamen, q za prekid):
s
Na meni je red: KAMEN
Kamen lomi škare, pobijedio sam!
Makaze-papir-kamen
Vaš red (Unesite s za škare, p za papir, t za kamen, q za prekid):
što
Broj pokusa: 1I pobijedio sam 1 (100,00%). Osvojili ste 0 (0,00%).
Ćao !, nadam se da ste uživali ..!

Ovim smo došli do kraja ovog vodiča za Java Enum. Nadam se da ste razumjeli Enum u Javi i njegovu primjenu kroz neke primjere u stvarnom vremenu.

Sad kad ste shvatili nabrajanje osnove kroz ovaj 'Java Enum Tutorial' pogledajte Edureka, pouzdana tvrtka za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekini tečajevi za obuku i certificiranje Java J2EE i SOA dizajnirani su za studente i profesionalce koji žele biti programer za Javu. Tečaj je dizajniran da vam pruži početnu prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte zajedno s raznim Java okvirima poput Hibernate & Proljeće .

Imate pitanje za nas? Spomenite ga u odjeljku za komentare na ovom blogu 'Java Enum Tutorial' i javit ćemo vam se što je prije moguće.