Výukový program Java Enum: Co to je a jak jej implementovat?



Tento článek o výuce Java Enum vám poskytne podrobné znalosti o konstantách Enum spolu s praktickými příklady pro lepší pochopení.

The Výčet v je způsob definování třídy s pevnými a pojmenovanými konstantami s jejich příslušnými pomocí klíčového slova výčet V tomhle ' Výukový program Java Enum ”Článek, naučíme sedefinovat výčet spolu spříklady pro lepší pochopení.

Co je výčet?

Výčet Java jsou třídy, které mají pevnou sadu konstant nebo proměnných, které nemají tendenci se měnit. Výčet v jazyce Java je dosažen pomocí klíčového slova výčet Java výčet konstanty jsou statický a finále implicitně. Funkce Enum je k dispozici od JDK verze 1.5.





Proč potřebujeme výčet?

výčet zlepšuje bezpečnost typu při kontrole při kompilaci, aby se předešlo chybám za běhu tím, že se vyhnete kódu typového štítku. Například pokud musíte vybrat jednu možnost z nejmenšího počtu dostupných možností, řekněme

Práce Typ: (Smlouva / Dočasný / Trvalý)



Zaměstnanec výukového programu Java enum

Nejlepší možností by pak bylo použít výčet Protože výčet lze snadno použít v přepínači. výčet lze projet. výčet umět mít pole, konstruktory a metody. Proto, zvyšuje kontrolu při kompilaci a vyhýbá se chybám způsobeným předáním neplatných konstant, protože jste již zdokumentovali, které hodnoty jsou legální pro použití.

Rozdíly mezi výčtem a třídou

Ačkoli třída a výčet mají podobné funkce v prostředí Java, liší se v několika aspektech. Pojďme diskutovat o rozdílech



Výčet Třída
Konstanty výčtu nelze přepsatKonstanty třídy lze přepsat
Enum nepodporuje vytváření objektůTřída podporuje vytváření objektů
Výčet nemůže rozšířit další třídyTřída může rozšířit další třídy
výčet crozhraní nářadíTřída může implementovat rozhraní


Praktické příklady výčtu

Abychom výčet pochopili mnohem lépe, provedeme několik praktických příkladů založených na následujícím.

Definování výčtu v Javě

Enum lze deklarovat buď uvnitř třídy, nebo mimo cnechat. Nelze jej však deklarovat uvnitř žádné metody. Vezměme si malý příklad, abychom porozuměli jeho syntaxi, definici a deklaraci.

Syntax:

název výčtu {konstanty}

V tomto příkladu jsme deklarovali hlavní() metoda uvnitř výčet

definice balíčku veřejná třída 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 příkladu hlavní() metoda je deklarována mimo enum.

balíček definice výčtu Barva {BAJAJ, KTM, YAMAHA} veřejná třída Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//Výstup:

YAMAHA

Enum použitý v pouzdru přepínače

Výčet lze použít také v příkazu switch. Je důležité, aby všechny příkazy případu musely používat konstanty ze stejného výčtu, jaký používá příkaz switch. Podívejme se na tento příklad.

Zde deklarujeme výčet s dny v týdnu jako jeho prvky a předáme data ve formě řetězce pro tisk dat případu shody.

balíček přepnul výčet Den {NEDĚLE, PONDĚLÍ, Úterý, STŘEDA, ČTVRTEK, PÁTEK, SOBOTA} veřejná třída Edureka {Denní den veřejná Edureka (Denní den) {this.day = den} public void dayIsLike () {switch (den) {případ PONDĚLÍ: System.out.println ('Ahoj, dnes je pondělí') případ přerušení ÚTERÝ: System.out.println ('Ahoj, dnes je úterý') případ přerušení STREDA: System.out.println ('Ahoj, dnes je středa ') případ přerušení ČTVRTEK: System.out.println (' Ahoj, dnes je čtvrtek ') případ přerušení PÁTEK: System.out.println (' Dobrý den, dnes je pátek. ') případ přerušení SOBOTA: System.out.println (' Ahoj, dnes je tvůj víkend ') případ přerušení NEDĚLE: System.out.println (' Ahoj, dnes je svátek ') výchozí přestávka: System.out.println (' Prosím, zadejte platný den. ') Break}} public static void main (String [] args) {String str = 'PONDĚLÍ' Edureka e1 = nový Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Výstup:

Ahoj, dnes jepondělí

Dědičnost pomocí výčtu

V zásadě jakékoli výčet je reprezentován jako třída, která rozšiřuje abstraktní třídu java.lang. Výčet a má několik statických členů. Proto an výčet nemůže rozšířit žádnou jinou třídu nebo výčet neexistuje žádný násobek dědictví . Provedeme příklad, abychom ho lépe pochopili.

hybridní framework v selenovém webdriveru

Zde zdědíme OS na základě výrobce telefonu.

balíček dědičnosti import java.util.ArrayList import java.util.List veřejná třída Edureka {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) pro (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} statické rozhraní HTTPMethodConvertible {public String getHTTPMethodType ()} statický výčet LibraryEnum implementuje HTTPMethodConvertible {FIRST ('Google Pixel'), SECOND '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ýstup:

Google Pixel
Android One

Výčet s přizpůsobenými hodnotami

Enums mají ve výchozím nastavení své vlastní řetězcové hodnoty, můžeme enumům také přiřadit některé vlastní hodnoty. Uvažujme níže uvedený příklad.

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

Ve výše uvedeném příkladu vidíme, že Traffic enum má tři členy. A to,

ČERVENÝ POMERANČ a ZELENÝ s mít své vlastní různé vlastní hodnoty STOP, ČEKEJ a JÍT resp.

Nyní, abychom v kódu použili stejný typ výčtu, se očekává, že budeme postupovat podle následujících bodů:

  • Musíme vytvořit parametrizovaný konstruktor pro tuto třídu výčtu. Protože to víme výčet objekt třídy nelze explicitně vytvořit, takže pro inicializaci použijeme parametrizovaný konstruktor.
  • The stavitel nemůže být veřejná nebo chráněná, kterou musí mít soukromé nebo výchozí modifikátory. Pokud vytvoříme veřejné nebo chráněné, umožní to inicializaci více než jednoho objektu, který je zcela proti funkce výčtu.
  • Abychom získali hodnotu, musíme vytvořit getrovou metodu výčty.

Na základě toho provedeme program.

balíček traffic enum TrafficSignal {RED ('STOP'), ZELENÝ ('GO'), ORANGE ('WAIT') soukromý String action public String getAction () {return this.action} soukromý TrafficSignal (String action) {this.action = action}} veřejná třída Edureka {public static void main (String args []) {TrafficSignal [] signály = TrafficSignal.values ​​() pro (TrafficSignal signal: signály) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}}

//Výstup:

název: ČERVENÁ akce: STOP
název: ZELENÁ akce: GO
mužskýe: ORANŽOVÁ akce: ČEKEJTE

Výčet v příkazech if-else-if

Nyní spustíme program založený na výčet v příkazech if-else-if. Zde najdeme směr průchodu předáním hodnot směrů dostupných ve výčtu.

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 : North ')} else {System.out.println (' Direction: South ')}}}

//Výstup:

Říciction: Sever

Různé metody používané s enum

Hodnoty (): Když vytvoříte výčet, Překladač Java interně přidává hodnoty () metoda. Tato metoda vrací pole obsahující všechny hodnoty výčtu.

//Syntax:

veřejné statické výčty typu [] hodnoty ()

Zjistíme hodnotu indexu konkrétního prvku v poli.

hodnoty balíku výčet Barva {ČERVENÁ, ZELENÁ, MODRÁ} veřejná třída Edureka {veřejná statická void hlavní (String [] args) {Barva arr [] = Color.values ​​() pro (Barva col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//Výstup:

jak psát třídu singleton v java

ČERVENÁ při indexu 0
ZELENÁ v indexu 1
MODRÁ v indexu 2
SÍŤ

Hodnota(): Tentometoda se používá k vrácení konstanty výčtu, jejíž hodnota se rovná předán jako argument při volání této metody.

//Syntax:

public static enum-type valueOf (String str)

Zde zjistíme cenu konkrétního telefonu na základě vstupu, který předáme řetězci.

hodnoty balíčku enum Mobile {Samsung (1099), Apple (1250), Google (1325) int cena Mobile (int p) {cena = p} int showPrice () {návratová cena}} veřejná třída Edureka {public static void main (String args []) {System.out.println ('Seznam mobilních telefonů:') pro (Mobile m: Mobile.values ​​()) {System.out.println (m + 'náklady' + m.showPrice () + 'dolary' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Selected:' + ret)}}

//Výstup:

Samsung stojí 1099 dolarů
Apple stojí 1250 dolarů
Google stojí 1325 dolarů
Vybráno: Samsung

Pořadové (): Interpret Java přidává pořadové () metoda interně, když vytvoří výčet Metoda ordinal () vrací index hodnoty výčtu.

//Syntax:

public final int ordinal ()

Zde zjistíme hodnotu indexu konkrétního prvku v poli. a také poloha třešňového ovoce.

Balíček pořadové výčet Ovoce {Apple, Banana, Cherry, Date, Elderberry} výčet Zelenina {Mrkev, červená řepa, fazole, rajče, cibule} veřejná třída Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. 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 + 'comes after' + f1)} Vegetables v1 = Vegetables.Beetroot if (f1.equals (v1)) {System.out.println (' Nesprávné ')}}}

//Výstup:

Apple: 0
Banán: 1
Třešeň: 2
Datum: 3
Bezinka: 4
Cherry přichází po Apple

Výhody Enum

  • Enum v Javě se vylepšuje bezpečnost typu
  • Enum je navržen tak, aby byl snadno použitelný v spínací případy
  • Enum může být projet
  • Enum může mít pole, metody, a konstruktéři
  • Enum může implementovat rozhraní
  • Výčet nemůže rozšířit a třída protože interně se rozšiřuje Výčet třída

Enum Usecase: Rock, Paper, Scissors Game

Použijeme výčet v Javě vytvořit naši dětskou hru, kámen (kámen) a nůžky . Následující kód vysvětluje jak.

balíček Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} veřejná třída 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 ('nLet we started ... n') while (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nVáš tah (Zadejte s pro nůžku, p pro papír, t pro kámen, q ukončit): 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 ( 'nProsím zkontrolujte vstup a zkuste to znovu! n') validInput = false}} while (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt's My turn: 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 řezá papír , Vyhrál jsem! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp player ampove == HandSign.STONE) {System.out.println (' nPaper obtéká kámen, vyhrál jsem! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp player Amove == HandSign.SCISSOR) {System.out.println ('nStone rozbije nůžky, vyhrál jsem! n') ++ numComputerWon} else {System.out.println ('nCongratulation. ..! Vyhráli jste! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nPočet pokusů: '+ numTrials) System.out.printf (' Vyhrál jsem% d (%. 2f %%) . Vyhráli jste% d (%. 2f %%).% N ', numComputerWon, 100,0 * numComputerWon / numTrials, numPlayerWon, 100,0 * numPlayerWon / numTrials) System.out.println (' Sbohem! Doufám, že se vám líbilo ..! ' )}}

//Výstup:

Nech nás začít...
Nůžkový papír-kámen
Vaše řada (zadejte s pro nůžky, p pro papír, t pro kámen, q pro ukončení):
s
Jsem na řadě: KAMENO
Kámen nůžky nůžky, vyhrál jsem!
Nůžkový papír-kámen
Vaše řada (zadejte s pro nůžky, p pro papír, t pro kámen, q pro ukončení):
co
Počet pokusů: 1 Vyhrál jsem 1 (100,00%). Vyhráli jste 0 (0,00%).
Sbohem! Doufám, že se vám líbilo ..!

S tímto se dostáváme na konec tohoto výukového programu Java Enum. Doufám, že jste pochopili Enum v Javě a jeho implementaci na několika příkladech v reálném čase.

Nyní, když jste to pochopili výčet základy prostřednictvím tohoto „Výukového programu Java Enum“ vyzkoušejte Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Výukové a certifikační kurzy Edureka Java J2EE a SOA jsou určeny pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými rámci Java, jako je Hibernate & Jaro .

Máte na nás dotaz? Uveďte to v sekci komentářů v tomto blogu „Java Enum Tutorial“ a my se vám ozveme co nejdříve.