Vadnica za Java Enum: Kaj je to in kako ga uporabiti?



Ta članek o vadnici Java Enum vam bo zagotovil podrobno znanje o konstantah Enum in praktične primere za boljše razumevanje.

The Število v je način definiranja razreda s fiksnimi in imenovanimi konstantami z njihovimi z uporabo ključne besede enum. V tem ' Vadnica Java Enum ”, Se bomo naučilidoločite Enumeration skupaj zprimeri za boljše razumevanje.

Kaj je štetje?

Java Enums so razredi, ki imajo določen nabor konstant ali spremenljivk, ki se običajno ne spreminjajo. Naštevanje v Javi je doseženo s ključno besedo enum. Java enum konstante so statična in dokončno implicitno. Funkcija Enum je na voljo od JDK različica 1.5.





Zakaj potrebujemo naštevanje?

enum izboljšuje varnost tipa pri preverjanju v času prevajanja, da se izogne ​​napakam med izvajanjem z izogibanjem kode vzorca. Če morate na primer izbrati eno od najmanj razpoložljivih možnosti, recimo

Posel Vrsta: (Pogodba / Začasno / Stalno)



Zaposleni v vajah Java enum

Potem bi bila najboljša možnost uporaba enum. Ker enum lahko enostavno uporabite v stikalu. enum je mogoče prehoditi. enum lahko imeti polja, konstruktorji in metode. Zato, poveča preverjanje časa prevajanja in se izogne ​​napakam zaradi vnosa neveljavnih konstant, saj ste že dokumentirali, katere vrednosti so zakonite za uporabo.

Razlike med enumom in razredom

Čeprav imata razred in enum podobno funkcionalnost v okolju Java, se v nekaj vidikih razlikujeta. Pogovorimo se o razlikah



Enum Razred
Konstante naštevanja ni mogoče preglasitiStalne konstante je mogoče preglasiti
Enum ne podpira ustvarjanja predmetovRazred podpira ustvarjanje predmetov
Enum ne more razširiti drugih razredovRazred lahko podaljša druge razrede
enum cizvedbeni vmesnikRazred lahko izvaja vmesnik


Praktični primeri Enum

Da bi zdaj mnogo bolje razumeli enum, izvedimo nekaj praktičnih primerov, ki temeljijo na naslednjem.

Določanje štetja v Javi

Enum je mogoče razglasiti znotraj razreda ali zunaj cpustiti. Vendar je ni mogoče prijaviti znotraj nobene metode. Vzemimo majhen primer, da bomo razumeli njegovo skladnjo, definicijo in izjavo.

Sintaksa:

ime enum {konstante}

V tem primeru smo razglasili glavni () metoda znotraj enum

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

// Ouput

KTM

V tem primeru je glavni () deklarirana metoda zunaj števila.

opredelitev paketa enum Barva {BAJAJ, KTM, YAMAHA} javni razred Edureka {javna statična void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

// izhod:

YAMAHA

program za obrnitev številke v javi

Enum, uporabljen v ohišju stikala

Naštevanje je mogoče uporabiti tudi v stavku switch. Pomembno je, da morajo vsi stavki primera uporabljati konstante iz istega naštevanja, kot jih uporablja stavek switch. Preverimo primer, ki temelji na tem.

Tu bomo kot elemente razglasili enum z dnevi v tednu, podatke pa bomo poslali v obliki niza za tiskanje podatkov primerljivega primera.

paket zamenjal enum Dan {NEDELJA, PONEDELJEK, TOREK, SREDA, ČETRTEK, PETEK, SOBOTA} javni razred Edureka {Dan dan javni Edureka (Dan dan) {this.day = day} public void dayIsLike () {switch (day) {case PONEDELJEK: System.out.println ('Živjo, danes je ponedeljek') zadeva za odmor TOREK: System.out.println ('Živjo, danes je torek') zadeva za odmor SREDA: System.out.println ('Živjo, danes je sreda ') break case ČETRTEK: System.out.println (' Hi, danes je četrtek ') break case PETEK: System.out.println (' Hello, Today is Friday. ') break case SOBOTA: System.out.println (' Živijo, danes je tvoj vikend ') primer odmora NEDELJA: System.out.println (' Živijo, danes je praznik ') privzeti odmor: System.out.println (' Prosimo, vnesite veljaven dan. ') Break}} public static void main (String [] args) {String str = 'PONEDELJEK' Edureka e1 = nova Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// izhod:

Živjo, danes jePonedeljek

Dedovanje z enumom

V bistvu katero koli enum je predstavljen kot razred, ki razširja abstraktni razred java.lang. Enum in ima več statičnih članov. Zato an enum ne more razširiti nobenega drugega razreda oz enum ni več dediščine . Izvedimo primer, da ga bomo bolje razumeli.

Tu bomo sistem podedovali na podlagi proizvajalca telefonov.

paket dedovanje uvoz java.util.ArrayList uvoz java.util.List javni razred Edureka {javna statična void glavna (String [] args) {Seznam dedovanje = novo ArrayList () nasledstvo.add (LibraryEnum.FIRST) nasledstvo.add (ClientEnum. google) za (HTTPMethodConvertible element: nasledstvo) {System.out.println (element.getHTTPMethodType ())}} statični vmesnik HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum implementira HTTPMethodConvertible {FIRST ('Google PiDD') '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 niz getHTTPMethodType () {return httpMethodType}}}

// izhod:

Google Pixel
Android One

Enum s prilagojenimi vrednostmi

Enumi imajo privzeto lastne vrednosti nizov, enumom lahko dodelimo tudi nekatere vrednosti po meri. Oglejmo si spodnji primer.

enum Promet {RDEČA (“STOP”), ORANŽNA (“ČAKAJ”), ZELENA (“GO”)}

V zgornjem primeru lahko vidimo, da ima Traffic enum tri člane. In sicer

RDEČA, ORANŽNA in ZELENA z imajo svoje različne vrednosti po meri NEHAJ, POČAKAJ in GO oz.

Zdaj naj bi za uporabo iste vrste enum v kodi sledili nekaterim točkam, ki so:

  • Ustvarjati moramo parametrizirani konstruktor za ta enum razred. Ker to vemo enum predmeta predmeta ni mogoče izrecno ustvariti, zato za inicializacijo uporabljamo parametrizirani konstruktor.
  • The gradbenik ne more biti javnost ali zaščitena, ki jo mora imeti zasebno ali privzeto modifikatorji. Če ustvarimo javno ali zaščiteno, bo to omogočilo inicializacijo več predmetov, ki so popolnoma proti enum funkcionalnost.
  • Ustvariti moramo getter metodo, da dobimo vrednost naštevanja.

Izvedimo program, ki temelji na tem.

paket prometa enum TrafficSignal {RDEČA ('STOP'), ZELENA ('GO'), ORANGE ('WAIT') zasebno dejanje niza javni niz getAction () {return this.action} private TrafficSignal (dejanje niza) {this.action = action}} javni razred Edureka {public static void main (String args []) {TrafficSignal [] Signali = TrafficSignal.values ​​() za (TrafficSignal signal: Signali) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}}

// izhod:

ime: RDEČA akcija: STOP
ime: ZELENA akcija: GO
moškie: POMORANČNA akcija: POČAKAJ

Naštej v stavkih if-else-if

Zdaj pa izvedimo program, ki temelji na enum v stavkih if-else-if. Tu bomo našli smer smeri, tako da posredujemo vrednosti smeri, ki so na voljo v naštevanju.

paket Navodila enum Navodila {EAST, WEST, NORTH, SOUTH} javni razred 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 ('Direction : North ')} else {System.out.println (' Direction: South ')}}}

// izhod:

Recimoktion: Sever

Različne metode, ki se uporabljajo z enumom

Vrednote(): Ko ustvarite enum, se Prevajalnik Java interno doda vrednote() metoda. Ta metoda vrne matriko ki vsebuje vse vrednosti enum.

// Sintaksa:

javne statične vrednosti enum-tipa [] ()

Ugotovili bomo vrednost indeksa določenega elementa v polju.

vrednosti paketa enum Barva {RDEČA, ZELENA, MODRA} javni razred Edureka {javna statična 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 ('RDEČA'))}}

// izhod:

RDEČA pri indeksu 0
ZELENA pri indeksu 1
MODRA pri indeksu 2
MREŽA

ValueOf (): Tometoda se uporablja za vrnitev številske konstante, katere vrednost je enaka posredovano kot argument med klicanjem te metode.

// Sintaksa:

public static enum-type valueOf (String str)

Tu bomo našli stroške določenega telefona glede na vhod, ki ga posredujemo nizu.

vrednosti paketa enum Mobile {Samsung (1099), Apple (1250), Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} javni razred Edureka {public static void main (String args []) {System.out.println ('Seznam mobilnih telefonov:') za (Mobile m: Mobile.values ​​()) {System.out.println (m + 'stroški' + m.showPrice () + 'dolarjev' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Izbrano:' + ret)}}

// izhod:

Samsung stane 1099 dolarjev
Apple stane 1250 dolarjev
Google stane 1325 dolarjev
Izbrano: Samsung

Redni (): Tolmač Java doda redni () interno, ko ustvari enum. Metoda ordinal () vrne indeks vrednosti enum.

// Sintaksa:

javni končni internski ()

Tu bomo ugotovili vrednost indeksa določenega elementa v matriki. in tudi položaj češnjevega sadja.

Paket redni enum Sadje {Apple, Banana, Cherry, Date, Elderberry} enum Zelenjava {Korenje, Rdeča pesa, Fižol, Paradižnik, Čebula} javni razred Edureka {public static void main (String [] args) {Fruits [] fru = Sadje. vrednosti () za (Sadje fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Sadje f1, f2, f3 f1 = Sadje.Apple f2 = Sadje.Češnja f3 = Sadje.Jabolka if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'pride po' + f1)} Zelenjava v1 = Zelenjava.Beetroot if (f1.equals (v1)) {System.out.println (' Napačno ')}}}

// izhod:

Apple: 0
Banana: 1
Češnja: 2
Datum: 3
Bezeg: 4
Češnja pride za Appleom

Prednosti Enum

  • Enum v Javi se izboljša varnost tipa
  • Enum je zasnovan tako, da ga je mogoče enostavno uporabljati v stikalne omare
  • Enum je lahko prečkali
  • Enum lahko polja, metode, in konstruktorji
  • Enum lahko izvede vmesniki
  • Enum ne more razširiti a razred ker se znotraj razširi Enum razred

Enum Usecase: Rock, Paper, Scissors Game

Uporabili bomo enum na Javi, da bi ustvarili svojo igro iz otroštva, skalni (kamniti) papir in škarje . Naslednja koda pojasnjuje, kako.

paket Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} javni razred 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 ('nZačnimo ... n'), medtem ko (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nVas obrat (Prosimo, vnesite s za škarje, p za papir, t za kamen, q zapreti): 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 ( 'nPreverite vnos in poskusite znova! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nNa meni je na vrsti: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nNas je na vrsti: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nNas je na vrsti: 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 ('nScissor reže papir , Zmagal sem! N ') ++ numComputerWon} sicer, če (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper zavije kamen, sem zmagal! N ') ++ numComputerWon} sicer če (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone lomi škarje, zmagal sem! n') ++ numComputerWon} else {System.out.println ('nČestitamo. ..! Zmagali ste! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nŠtevilo preizkusov: '+ numTrials) System.out.printf (' Zmagal sem% d (%. 2f %%) . Zmagali ste% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Adijo, upam, da ste uživali ..! ' )}}

// izhod:

Začnimo ...
Škarje-papir-kamen
Vaša vrsta (Prosimo, vnesite s za škarje, p za papir, t za kamen, q za izhod):
s
Na vrsti sem jaz: KAMEN
Škarje za lomljenje kamnov, zmagal sem!
Škarje-papir-kamen
Vaša vrsta (Prosimo, vnesite s za škarje, p za papir, t za kamen, q za izhod):
kaj
Število poskusov: 1I zmagal sem 1 (100,00%). Zmagali ste 0 (0,00%).
Adijo! Upam, da ste uživali ..!

S tem smo prišli do konca te vadnice Java Enum. Upam, da ste Enum v Javi in ​​njegovo izvajanje razumeli na nekaterih primerih v realnem času.

Zdaj, ko ste razumeli enum s pomočjo tega 'Vodiča za Java Enum' si oglejte Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, ki se širijo po vsem svetu. Edurekini tečaji za usposabljanje in certificiranje Java J2EE in SOA so namenjeni študentom in strokovnjakom, ki želijo biti razvijalec Java. Tečaj je zasnovan tako, da vam omogoči uvod v programiranje Java in vas usposobi za osnovne in napredne koncepte Java, skupaj z različnimi Java okviri, kot so Hibernate & Pomlad .

Imate vprašanje za nas? Omenite ga v oddelku za komentarje v tem blogu 'Vadnica za Java Enum' in v najkrajšem možnem času se vam bomo oglasili.