Java Enum Tutorial: Vad är det och hur man implementerar det?



Den här artikeln om Java Enum Tutorial ger dig en detaljerad kunskap om Enum-konstanter tillsammans med praktiska exempel för bättre förståelse.

De Uppräkning i är ett sätt att definiera en klass med fasta och namngivna konstanter med deras respektive med hjälp av nyckelordet enum. I denna ' Java Enum Tutorial ”Artikel, kommer vi att lära oss attdefiniera uppräkning tillsammans medexempel för en bättre förståelse.

Vad är uppräkning?

Java Enums är klasser som har en fast uppsättning konstanter eller variabler som inte tenderar att förändras. Uppräkningen i Java uppnås med hjälp av nyckelordet enum. Java enum konstanter är statisk och slutlig implicit. Enum-funktionen är tillgänglig sedan JDK version 1.5.





Varför behöver vi uppräkning?

enum förbättrar typsäkerheten vid tidskontroll för att undvika fel vid körning genom att undvika pannkodskod. Om du till exempel måste välja en möjlighet av det minsta antalet tillgängliga alternativ, säg,

Jobb Typ: (Avtal / Tillfällig / Permanent)



Java enum tutorial anställd

Då skulle det bästa alternativet vara att använda en enum. Därför att enum kan enkelt användas i omkopplaren. enum kan korsas. enum burk ha fält, konstruktörer och metoder. Därmed, det ökar kompileringstidskontrollen och undviker fel på grund av överföring av ogiltiga konstanter, eftersom du redan har dokumenterat vilka värden som är lagliga att använda.

Skillnader mellan Enum och Class

Även om en klass och enum har liknande funktioner i Java-miljö skiljer de sig åt i några få aspekter. Låt oss diskutera skillnaderna



Enum Klass
Enumkonstanter kan inte åsidosättasKlasskonstanter kan åsidosättas
Enum stöder inte skapande av objektKlass stöder skapandet av objekt
Enum kan inte utöka andra klasserEn klass kan utöka andra klasser
enum cett verktygsgränssnittEn klass kan implementera gränssnitt


Praktiska exempel på Enum

För att förstå enum på ett mycket bättre sätt, låt oss nu utföra några praktiska exempel baserat på följande.

Definiera uppräkning i Java

Enum kan deklareras antingen i en klass eller utanför en clåta. Men det kan inte förklaras i någon metod. Låt oss ta ett litet exempel för att förstå dess syntax, definition och deklaration.

Syntax:

enum namn {konstanter}

I detta exempel har vi förklarat huvud () metod inuti enum

en stor skillnad mellan en hackare och en etisk hackare är:
paketdefinition public class Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

I detta exempel är huvud () metoden deklareras utanför av enum.

paketdefinition enum Färg {BAJAJ, KTM, YAMAHA} public class Edureka {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//Produktion:

YAMAHA

Enum används i Switch Case

Uppräkning kan också användas i ett växlingsuttalande. Det är viktigt att alla falluttalanden måste använda konstanter från samma enum som de används i switch-uttalandet. Låt oss kontrollera ett exempel baserat på detta.

Här kommer vi att förklara ett enum med veckodagar som dess element och vi kommer att skicka uppgifterna i form av en sträng för att skriva ut data i matchande fall.

paket bytte enum Dag {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, LATURDAY} public class Edureka {Day day public Edureka (Day day) {this.day = day} public void dayIsLike () {switch (day) {case MÅNDAG: System.out.println ('Hej, idag är måndag') pausfall TUESDAG: System.out.println ('Hej, idag är tisdag') pausfall ONSDAG: System.out.println ('Hej, idag är onsdag ') break case TORSDAG: System.out.println (' Hej, idag är torsdag ') break case FRIDAG: System.out.println (' Hello, Today is Friday. ') break case LÖRDAG: System.out.println (' Hej, idag är din helg ') pausfall SÖNDAG: System.out.println (' Hej, idag är en helgdag ') pausstandard: System.out.println (' Ange en giltig dag. ') Paus}} offentlig statisk void main (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Produktion:

Hej, idag är detMåndag

Arv med enum

I grund och botten någon enum representeras som en klass som utvidgar den abstrakta klassen java.lang. Enum och har flera statiska medlemmar. Därför en enum kan inte förlänga någon annan klass eller enum det finns ingen multipel arv . Låt oss utföra ett exempel för att förstå det på ett bättre sätt.

Här kommer vi att ärva operativsystemet baserat på telefonproducenten.

exempel på instansvariabel i java
import av paketarv 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) för (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} statiskt gränssnitt HTTPMethodConvertible {public String getHTTPMethodType ()} statisk enum LibraryEnum implementerar HTTPMethodConvertible {FIRST ('Google Pixel' 'Huawei'), TREDJE ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} static enum ClientEnum implementerar HTTPMethodConvertible {huawei ('HongMing OS'), apple ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} public String getHTTPMethodType () {return httpMethodType}}}

//Produktion:

Google Pixel
Android One

Enum med anpassade värden

Enums har sina egna strängvärden som standard, vi kan också tilldela några anpassade värden till enums. Låt oss titta på exemplet nedan.

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

I exemplet ovan kan vi se att Traffic enum har tre medlemmar. Nämligen,

RÖDORANGE och GRÖN med har sina egna anpassade värden STOPP, VÄNTA och respektive.

För att använda samma typ av enum i kod förväntas vi följa några punkter som är:

  • Vi måste skapa parametrerad konstruktör för den här enumklassen. För att vi vet det enum klassens objekt kan inte skapas uttryckligen så för initialisering använder vi parametrerade konstruktörer.
  • De byggare kan inte vara allmänheten eller skyddad den måste ha privat eller standard modifierare. Om vi ​​skapar offentliga eller skyddade kommer det att tillåta initialisering av mer än ett objekt som är helt emot enum-funktionalitet.
  • Vi måste skapa en gettermetod för att få värdet av enums.

Låt oss köra ett program baserat på detta.

paket trafik enum TrafficSignal {RED ('STOPP'), GRÖNT ('GO'), ORANGE ('WAIT') privat Strängåtgärd offentlig String getAction () {return this.action} privat TrafficSignal (Strängåtgärd) {this.action = åtgärd}} offentlig klass Edureka {public static void main (String args []) {TrafficSignal [] signals = TrafficSignal.values ​​() for (TrafficSignal signal: signals) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}}

//Produktion:

namn: RÖD åtgärd: STOPP
namn: GRÖN åtgärd: GO
manlige: ORANGE-åtgärd: VÄNTA

Enum i if-else-if uttalanden

Låt oss nu köra ett program baserat på enum i if-else-if uttalanden. Här hittar vi riktningen för traversal genom att skicka värdena för riktningar som finns tillgängliga i enum.

paket Vägbeskrivning enum Vägbeskrivning {EAST, WEST, NORTH, SOUTH} public class Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Riktning: Öst')} annars om (dir == Vägbeskrivning.VÄNST) {System.out.println ('Riktning: Väst')} annars om (dir == Vägbeskrivning.NORTH) {System.out.println ('Riktning : North ')} else {System.out.println (' Riktning: South ')}}}

//Produktion:

Sägaction: norr

Olika metoder som används med enum

Värden (): När du skapar ett enum, kommer Java-kompilator internt lägger till värden () metod. Denna metod returnerar en array som innehåller alla värden i enum.

//Syntax:

offentliga statiska enumtyp [] -värden ()

Vi kommer att ta reda på indexvärdet för ett visst element i en matris.

paketvärden enum Color {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'vid index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//Produktion:

RÖD vid index 0
GRÖN vid index 1
BLÅ vid index 2
NETTO

Värdet av(): Dettametoden används för att returnera uppräkningskonstanten vars värde är lika med skickas som ett argument medan du kallar den här metoden.

//Syntax:

public static enum-type valueOf (String str)

Här hittar vi kostnaden för en viss telefon baserat på den ingång vi skickar till strängen.

paketvärden av enum Mobile {Samsung (1099), Apple (1250), Google (1325) int price Mobile (int p) {price = p} int showPrice () {return price}} public class Edureka {public static void main (String args []) {System.out.println ('CellPhone List:') för (Mobile m: Mobile.values ​​()) {System.out.println (m + 'kostnader' + m.showPrice () + 'dollar' )} Mobil ret ret = Mobile.valueOf ('Samsung') System.out.println ('Vald:' + ret)}}

//Produktion:

Samsung kostar 1099 dollar
Apple kostar 1250 dollar
Google kostar 1325 dollar
Vald: Samsung

Ordinarie (): Java-tolk lägger till ordinal () metod internt när den skapar en enum. Metoden ordinal () returnerar index av enumvärdet.

//Syntax:

offentlig slutlig ordinarie ()

Här kommer vi att ta reda på indexvärdet för ett visst element i en matris. och även körsbärsfruktens position.

Paket ordinarie enum Frukter {Apple, Banana, Cherry, Date, Elderberry} enum Grönsaker {Morot, Rödbeta, Bönor, Tomat, Lök} allmän klass Edureka {offentlig statisk tomrum (String [] args) {Frukter [] fru = Frukter. värden () för (Frukter fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Frukter f1, f2, f3 f1 = Frukter. Äpple f2 = Frukter. Körsbär f3 = Frukter. Äpple om (f2.compareTo (f1)> 0) {System.out.println (f2 + 'kommer efter' + f1)} Grönsaker v1 = Grönsaker. Rödbete om (f1.equals (v1)) {System.out.println (' Felaktig') } } }

//Produktion:

Apple: 0
Banan: 1
Körsbär: 2
Datum: 3
Fläderbär: 4
Cherry kommer efter Apple

Fördelar med Enum

  • Enum i Java förbättras typ säkerhet
  • Enum är utformad för att vara lätt att använda i växla fall
  • Enum kan vara korsade
  • Enum kan ha fält, metoder, och konstruktörer
  • Enum kan implementera gränssnitt
  • Enum kan inte förlänga en klass för internt sträcker det sig Enum klass

Enum Usecase: Rock, Paper, Scissors Game

skapa ec2-instans från ögonblicksbild

Vi kommer använda enum i Java för att skapa vårt barndomsspel, stenpapperet och saxen . Följande kod förklarar hur.

paket Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} public class 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 ('nLåt oss börja ... n') medan (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nDin tur (Ange s för en sax, p för papper, t för sten, q att sluta): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} annars om (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} annat om (inChar == 'p') {playerMove = HandSign.PAPER} annat om (inChar == 't') {playerMove = HandSign.STONE} annat {System.out.println ( 'nKolla inmatningen och försök igen! n') validInput = false}} medan (! val idInput) om (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt's My turn: SCISSORn')} annars om (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} annars om (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nSississ skär papper , Jag vann! N ') ++ numComputerWon} annars om (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper wraps stone, I won! N ') ++ numComputerWon} annars om (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone bryter sax, jag vann! n') ++ numComputerWon} annat {System.out.println ('nCongratulations. ..! Du vann! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nAntal försök: '+ numTrials) System.out.printf (' Jag vann% d (%. 2f %%) . Du vann% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Hej !, hoppas att du gillade ..! ' )}}

//Produktion:

Låt oss börja...
Saxpapper-sten
Din tur (Ange s för en sax, p för papper, t för sten, q för att sluta):
s
Det är min tur: STEN
Stone bryter sax, jag vann!
Saxpapper-sten
Din tur (Ange s för en sax, p för papper, t för sten, q för att sluta):
Vad
Antalet försök: 1I vann 1 (100,00%). Du vann 0 (0,00%).
Hej !, hoppas att du gillade ..!

Med detta kommer vi till ett slut på denna Java Enum Tutorial. Jag hoppas att du har förstått Enum i Java och dess implementering genom några exempel i realtid.

Nu när du har förstått det enum grunderna genom denna 'Java Enum Tutorial' kolla in av Edureka, ett pålitligt inlärningsföretag online med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edurekas Java J2EE- och SOA-utbildning och certifieringskurser är utformade för studenter och yrkesverksamma som vill bli Java-utvecklare. Kursen är utformad för att ge dig ett försprång till Java-programmering och träna dig för både kärn- och avancerade Java-koncept tillsammans med olika Java-ramverk som Hibernate & Vår .

Har du en fråga till oss? Nämn det i kommentarsektionen i denna “Java Enum Tutorial” -blogg så återkommer vi till dig så snart som möjligt.