Výukový program Java Enum: Čo to je a ako ho implementovať?



Tento článok o výučbe Java Enum vám poskytne podrobné znalosti konštánt Enum spolu s praktickými príkladmi na lepšie pochopenie.

The Výpočet v je spôsob definovania triedy s pevnými a pomenovanými konštantami s ich príslušnými pomocou kľúčového slova enum. V tomto ' Výukový program Java Enum ”Článok, naučíme sadefinovať Enumeration spolu spríklady pre lepšie pochopenie.

Čo je to enumerácia?

Java Enums sú triedy, ktoré majú pevnú množinu konštánt alebo premenných, ktoré sa nemenia. Výpočet v jazyku Java sa dosahuje pomocou kľúčového slova enum. Java enum konštanty sú statický a Konečný implicitne. Funkcia Enum je k dispozícii od JDK verzia 1.5.





Prečo potrebujeme výpočet?

enum zlepšuje bezpečnosť typu pri kontrole počas kompilácie, aby sa predišlo chybám za behu tým, že sa vyhne štandardnému kódu. Ak napríklad musíte vybrať jednu z možností z najmenšieho počtu dostupných možností, povedzme

Job Typ: (Zmluva / Dočasné / Permanentné)



Zamestnanec výučby Java enum

Najlepšou možnosťou by potom bolo použiť znak enum. Pretože enum možno ľahko použiť v prepínači. enum možno prechádzať. enum môcť mať polia, konštruktory a metódy. Preto, zvyšuje kontrolu kompilácie a predchádza chybám v dôsledku zadania neplatných konštánt, pretože ste už zdokumentovali, ktoré hodnoty sú legálne použité.

Rozdiely medzi Enum a Class

Aj keď trieda a enum majú podobné funkcie v prostredí Java, líšia sa v niekoľkých aspektoch. Poďme diskutovať o rozdieloch



Enum Trieda
Konštanty výčtu nemožno prepísaťKonštanty triedy je možné prepísať
Program Enum nepodporuje vytváranie objektovTriedy podporujú vytváranie objektov
Enum nemôže rozšíriť ďalšie triedyTrieda môže rozšíriť ďalšie triedy
enum crozhranie strojaTrieda môže implementovať rozhranie


Praktické príklady Enum

Teraz, aby sme rozumeli enumu oveľa lepšie, urobme niekoľko praktických príkladov založených na nasledujúcom.

Definovanie enumerácie v Jave

Enum možno deklarovať buď vo vnútri triedy, alebo mimo cnechajme. Ale nemôže byť deklarovaný v rámci žiadnej metódy. Uveďme si malý príklad na pochopenie jeho syntaxe, definície a deklarácie.

Syntax:

enum name {constants}

V tomto príklade sme deklarovali hlavné() metóda vo vnútri enum

definícia balíka verejná trieda Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Výstup

KTM

V tomto príklade hlavné() metóda je deklarovaná vonku enum.

definícia balíka enum Color {BAJAJ, KTM, YAMAHA} verejná trieda Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//Výkon:

YAMAHA

Enum použitý v prípade vypínača

Vymenovanie je možné použiť aj vo výpise príkazu. Je dôležité, aby všetky príkazy prípadu museli používať konštanty z rovnakého výčtu, aký používa príkaz switch. Pozrime sa na príklad založený na tomto.

Tu vyhlásime enum s dňami v týždni ako jeho prvky a údaje odovzdáme vo forme reťazca na vytlačenie údajov zhody.

balíček zmenený enum Deň {NEDEĽA, PONDELOK, UTOROK, STREDA, ŠTVRTOK, PIATOK, SOBOTA} verejná trieda Edureka {Deň deň verejná Edureka (Deň deň) {this.day = deň} public void dayIsLike () {switch (deň) {prípad PONDELOK: System.out.println („Ahoj, dnes je pondelok“) prípad prerušenia UTOROK: System.out.println („Ahoj, dnes je utorok“) prípad prerušenia STREDA: System.out.println („Ahoj, dnes je streda“ ') prípad prerušenia ŠTVRTOK: System.out.println (' Ahoj, dnes je štvrtok ') prípad prerušenia PIATOK: System.out.println (' Dobrý deň, dnes je piatok. ') prípad prerušenia SOBOTA: System.out.println (' Ahoj, dnes je tvoj víkend ') prípad prerušenia NEDEĽA: System.out.println (' Ahoj, dnes je sviatok ') predvolené prerušenie: System.out.println (' Prosím, zadajte platný deň. ') Break}} public static void main (String [] args) {String str = 'PONDELOK' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Výkon:

Ahoj, dnes jePondelok

Dedenie pomocou enum

V podstate akýkoľvek enum je reprezentovaná ako trieda, ktorá rozširuje abstraktnú triedu java.lang. Enum a má niekoľko statických členov. Preto an enum nemôže rozširovať inú triedu alebo enum nie je ich viac dedenia . Urobme si príklad, aby sme ho lepšie pochopili.

čo je zalomenie riadku v html

Tu dedíme OS na základe výrobcu telefónu.

balík dedičstva import java.util.ArrayList import java.util.List verejná trieda Edureka {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) pre (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} statické rozhranie HTTPMethodConvertible {public String getHTTPMethodType ()} static enum LibraryEnum implementuje HTTPMethodConvertible {FIRST ('Google Pixel'), SECON 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum implementuje HTTPMethodConvertible {huawei ('HongMing OS') ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

//Výkon:

Google Pixel
Android One

Enum s prispôsobenými hodnotami

Enumy majú predvolene svoje vlastné hodnoty reťazcov, enumom môžeme tiež priradiť niektoré vlastné hodnoty. Zvážme nasledujúci príklad.

enum Traffic {RED („STOP“), ORANGE („WAIT“), GREEN („GO“)}

Na vyššie uvedenom príklade vidíme, že Traffic enum má troch členov. Menovite,

ČERVENÁ, ORANŽOVÁ a ZELENÁ majú svoje vlastné odlišné vlastné hodnoty STOP, POČKEJ a Choď resp.

Teraz, keď chceme v kóde použiť rovnaký typ výčtu, sa očakáva, že budeme postupovať podľa nasledujúcich bodov:

  • Musíme tvoriť parametrizovaný konštruktor pre túto triedu enum. Pretože to vieme enum objekt triedy nemožno vytvoriť explicitne, takže na inicializáciu použijeme parametrizovaný konštruktor.
  • The staviteľ nemôže byť verejná alebo chránená, ktorú musí mať súkromné alebo predvolené modifikátory. Ak vytvoríme verejný alebo chránený, umožní to inicializáciu viac ako jedného objektu, ktorý je úplne proti funkčnosť enum.
  • Aby sme dostali hodnotu, musíme vytvoriť getrovú metódu enumy.

Na základe toho vykonajme program.

balíček traffic enum TrafficSignal {RED ('STOP'), ZELENÝ ('GO'), ORANGE ('WAIT') súkromný String action public String getAction () {return this.action} private TrafficSignal (String action) {this.action = action}} verejná trieda Edureka {public static void main (String args []) {TrafficSignal [] signály = TrafficSignal.values ​​() pre (signál TrafficSignal: signály) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}}

//Výkon:

názov: ČERVENÁ akcia: STOP
názov: ZELENÁ akcia: GO
Muže: ORANŽOVÁ akcia: POČKajte

Vymenujte výroky typu if-else-if

Teraz vykonajme program založený na vypísať výroky if-else-if. Tu nájdeme smer priechodu odovzdaním hodnôt smerov dostupných v enume.

balíček Directions enum Directions {EAST, WEST, NORTH, SOUTH} public class 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 : Sever ')} else {System.out.println (' Smer: Juh ')}}}

//Výkon:

Povedaťction: Sever

Rôzne metódy používané s enum

Hodnoty (): Keď vytvoríte enum, Kompilátor Java interne pridáva hodnoty () metóda. Táto metóda vracia pole obsahujúci všetky hodnoty enum.

// Syntax:

verejné statické hodnoty typu výčtu [] ()

Zistíme hodnotu indexu konkrétneho prvku v poli.

hodnoty balíka enum Farba {RED, GREEN, BLUE} verejná trieda Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//Výkon:

použite python vo vizuálnom štúdiu

ČERVENÉ pri indexe 0
ZELENÁ pri indexe 1
MODRÁ pri indexe 2
NET

Hodnota(): Totometóda sa používa na vrátenie konštanty výčtu, ktorej hodnota sa rovná prešiel ako argument pri volaní tejto metódy.

// Syntax:

public static enum-type valueOf (String str)

Tu nájdeme náklady na konkrétny telefón na základe vstupu, ktorý odovzdáme reťazcu.

hodnoty balíka enum Mobile {Samsung (1099), Apple (1250), Google (1325) int cena Mobile (int p) {cena = p} int showPrice () {návratová cena}} verejná trieda Edureka {public static void main (String args []) {System.out.println ('Zoznam mobilných telefónov:') pre (Mobile m: Mobile.values ​​()) {System.out.println (m + 'náklady' + m.showPrice () + 'doláre' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Selected:' + ret)}}

//Výkon:

Samsung stojí 1099 dolárov
Apple stojí 1250 dolárov
Google stojí 1325 dolárov
Vybraté: Samsung

Poradové (): Tlmočník Java pridáva radové () metóda interne, keď vytvára enum. Metóda ordinal () vracia znak index enumovej hodnoty.

// Syntax:

public final int ordinal ()

Tu zistíme hodnotu indexu konkrétneho prvku v poli. a tiež polohu čerešňového ovocia.

Poradové číslo v balení Ovocie {jablko, banán, čerešňa, datľ, baza} enum Zelenina {mrkva, červená repa, fazuľa, paradajka, cibuľa} verejná trieda Edureka {verejné statické vyprázdnenie main (String [] args) {Fruits [] fru = Ovocie. values ​​() for (Fruits fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Fruits f1, f2, f3 f1 = Fruits.Apple f2 = Fruits.Cherry f3 = Fruits.Apple if (f2.compareTo (f1)> 0) {System.out.println (f2 + 'nasleduje po' + f1)} Zelenina v1 = Zelenina.Beetroot if (f1.equals (v1)) {System.out.println (' Nesprávne ')}}}

//Výkon:

Apple: 0
Banán: 1
Čerešňa: 2
Dátum: 3
Elderberry: 4
Po Apple prichádza čerešňa

Výhody Enum

  • Enum v Jave sa vylepšuje bezpečnosť typu
  • Enum je navrhnutý tak, aby bol ľahko použiteľný v prepínacie prípady
  • Enum môže byť prekonaný
  • Enum môže mať polia, metódy, a konštruktéri
  • Enum môže implementovať rozhrania
  • Enum nemôže predĺžiť a trieda pretože vnútorne sa rozširuje Enum trieda

Enum Usecase: Rock, Paper, Scissors Game

Použijeme enum v Jave, aby sme vytvorili našu detskú hru, kameň (kameň) a nožnice . Nasledujúci kód vysvetľuje ako.

balík Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} verejná trieda 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 = nový Scanner (System.in) System.out.println ('nZačnime ... n') while (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nVaša odbočka (Zadajte s pre nožnicu, p pre papier, t pre kameň, q quit): 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 ( 'nSkontrolujte vstup a skúste to znova! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('Nie je rad na mne: SCISSORn')} else if (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's My Turn: PAPERn')} else {computerMove = HandSign.STONE System.out.println ('nIt's My Turn: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} else if (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor strihá papier , Vyhral som! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp player ampove == HandSign.STONE) {System.out.println (' nPaper obalí kameň, vyhral som! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp player ampMove == HandSign.SCISSOR) {System.out.println ('nStone zlomí nožnice, vyhral som! n') ++ numComputerWon} else {System.out.println ('nCongratulujem. ..! Vyhrali ste! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nPočet pokusov: '+ numTrials) System.out.printf (' vyhral som% d (%. 2f %%) . Vyhrali ste% d (%. 2f %%).% N ', numComputerWon, 100,0 * numComputerWon / numTrials, numPlayerWon, 100,0 * numPlayerWon / numTrials) System.out.println (' Ahoj! ', Dúfam, že sa vám páčilo ..!' )}}

//Výkon:

Začnime ...
Nožnicový papier-kameň
Váš ťah (zadajte s pre nožnicu, p pre papier, t pre kameň, q pre ukončenie):
s
Som na rade: KAMEŇ
Kameň láme nožnice, vyhral som!
Nožnicový papier-kameň
Váš ťah (zadajte s pre nožnicu, p pre papier, t pre kameň, q pre ukončenie):
čo
Počet pokusov: 1 Vyhral som 1 (100,00%). Vyhrali ste 0 (0,00%).
Ahoj !, Dúfam, že sa vám páčilo ..!

Týmto sa dostávame na koniec tohto výučbového programu Java Enum. Dúfam, že ste pochopili Enum v Jave a jeho implementáciu prostredníctvom niekoľkých príkladov v reálnom čase.

Teraz, keď ste to pochopili enum základy tohto „Výučbového programu Java Enum“, pozrite si autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikové a certifikačné kurzy Edureka Java J2EE a SOA sú určené pre študentov a profesionálov, ktorí chcú byť Java Developerom. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi Java frameworkmi ako Hibernate & Jar .

Máte na nás otázku? Uveďte to v sekcii komentárov v tomto blogu „Java Enum Tutorial“ a my sa vám ozveme čo najskôr.