Java Enum Tutorial: Hvad er det, og hvordan implementeres det?



Denne artikel om Java Enum Tutorial giver dig en detaljeret viden om Enum-konstanter sammen med praktiske eksempler for en bedre forståelse.

Det Optælling i er en måde at definere en klasse med faste og navngivne konstanter med deres respektive ved hjælp af nøgleordet enum. Heri ' Java Enum Tutorial ”Artikel, vil vi lære atdefinere Tælling sammen medeksempler for en bedre forståelse.

Hvad er optælling?

Java Enums er klasser, der har et fast sæt konstanter eller variabler, der ikke har tendens til at ændre sig. Tællingen i Java opnås ved hjælp af nøgleordet enum. Java enum konstanter er statisk og endelig implicit. Enum-funktionen er tilgængelig siden JDK version 1.5.





Hvorfor har vi brug for optælling?

enum forbedrer typesikkerhed ved kompileringstidskontrol for at undgå fejl ved kørselstid ved at undgå kedelpladekode. For eksempel, hvis du er nødt til at vælge en mulighed blandt det mindste antal tilgængelige muligheder, siger

Job Type: (Kontrakt / Midlertidig / Permanent)



Java enum tutorial medarbejder

Så ville den bedste mulighed være at bruge en enum. Fordi enum kan let bruges i kontakten. enum kan krydses. enum kan har felter, konstruktører og metoder. Derfor, det øger kompileringstidskontrol og undgår fejl på grund af indlevering af ugyldige konstanter, som du allerede har dokumenteret, hvilke værdier der er lovlige at bruge.

Forskelle mellem Enum og Class

Selvom en klasse og enum har lignende funktionalitet i Java-miljø, adskiller de sig i nogle få aspekter. Lad os diskutere forskellene



Enum Klasse
Enum-konstanter kan ikke tilsidesættesKlassekonstanter kan tilsidesættes
Enum understøtter ikke oprettelse af objekterKlasse støtter oprettelsen af ​​objekter
Enum kan ikke udvide andre klasserEn klasse kan udvide andre klasser
enum cen redskabsgrænsefladeEn klasse kan implementere interface


Praktiske eksempler på Enum

For at forstå enum på en meget bedre måde, lad os udføre nogle praktiske eksempler baseret på det følgende.

Definition af optælling i Java

Enum kan erklæres enten inden for en klasse eller uden for en clade. Men det kan ikke erklæres inden for nogen metode. Lad os tage et lille eksempel for at forstå dens syntaks, definition og erklæring.

Syntaks:

enum navn {konstanter}

I dette eksempel har vi erklæret hoved () metode inde enum

pakke definition offentlig klasse Edureka {enum niveau {BAJA, KTM, YAMAHA} offentlig statisk ugyldig hoved (String [] args) {Niveau myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

I dette eksempel er hoved () metode erklæres uden for af enum.

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

//Produktion:

YAMAHA

Enum brugt i Switch Case

Optælling kan også bruges i en switch-erklæring. Det er vigtigt, at alle sagserklæringer skal bruge konstanter fra samme rum som brugt af switch-sætningen. Lad os kontrollere et eksempel baseret på dette.

Her erklærer vi et enum med ugedage som dets elementer, og vi videregiver dataene i form af en streng for at udskrive dataene i den matchende sag.

pakke skiftet 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 MANDAG: System.out.println ('Hej, i dag er mandag') pause sag TUESDAG: System.out.println ('Hej, i dag er tirsdag') pause sag ONSDAG: System.out.println ('Hej, i dag er onsdag ') break case TORSDAG: System.out.println (' Hej, i dag er torsdag ') break case FREDAG: System.out.println (' Hello, Today is Friday. ') break case LØRDAG: System.out.println (' Hej, i dag er din weekend ') pausesag SUNDAG: System.out.println (' Hej, i dag er en ferie ') pause standard: System.out.println (' Angiv en gyldig dag. ') Pause}} offentlig statisk ugyldig hoved (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Produktion:

Hej, i dag er detMandag

Arv ved hjælp af enum

Dybest set nogen enum er repræsenteret som en klasse, der udvider den abstrakte klasse java.lang. Enum og har flere statiske medlemmer. Derfor er en enum kan ikke udvide nogen anden klasse eller enum der er ikke flere arv . Lad os udføre et eksempel for at forstå det på en bedre måde.

Her arver vi operativsystemet baseret på telefonproducenten.

pakke arveimport java.util.ArrayList import java.util.List offentlig klasse Edureka {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) for (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} statisk grænseflade HTTPMethodConvertible {public String getHTTPMethodType ()} statisk enum LibraryEnum implementerer HTTPMethodConvertible {FIRST ('Google Pixel' 'Huawei'), TREDJE ('Apple 11 Pro') String httpMethodType LibraryEnum (strengtelefon) {httpMethodType = telefon} offentlig String getHTTPMethodType () {return httpMethodType}} statisk enum ClientEnum implementerer 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 tilpassede værdier

hvordan man vender et helt tal i python

Enums har deres egne strengværdier som standard, vi kan også tildele nogle brugerdefinerede værdier til enums. Lad os overveje nedenstående eksempel.

enum Trafik {RØD (“STOP”), ORANGE (“VENT”), GRØN (“GO”)}

I ovenstående eksempel kan vi se, at Traffic enum har tre medlemmer. Nemlig

RØD, ORANGE og GRØN med har deres egne forskellige brugerdefinerede værdier STOP, vent og henholdsvis.

For at bruge den samme type enum i kode forventes det, at vi følger nogle punkter, der er:

  • Vi er nødt til at skabe parametreret konstruktør til denne enum-klasse. Fordi vi ved det enum klassens objekt kan ikke oprettes eksplicit, så vi bruger parametriserede konstruktører til initialisering.
  • Det Bygger kan ikke være offentligheden eller beskyttet, den skal have privat eller Standard modifikatorer. Hvis vi opretter offentlige eller beskyttede, vil det tillade initialisering af mere end et objekt, der er helt imod enum funktionalitet.
  • Vi er nødt til at oprette en getter-metode for at få værdien af enums.

Lad os udføre et program baseret på dette.

pakke trafik enum TrafficSignal {RED ('STOP'), GRØN ('GO'), ORANGE ('WAIT') privat String handling offentlig String getAction () {returner this.action} privat TrafficSignal (String handling) {this.action = handling}} offentlig klasse Edureka {public static void main (String args []) {TrafficSignal [] signals = TrafficSignal.values ​​() for (TrafficSignal signal: signals) {System.out.println ('name:' + signal.name () + 'handling:' + signal.getAction ())}}}

//Produktion:

navn: RØD handling: STOP
navn: GRØN handling: GO
han-e: ORANGE handling: VENT

Enum i if-else-if udsagn

Lad os nu udføre et program baseret på enum i if-else-if udsagn. Her finder vi gennemkørselsretningen ved at overføre værdierne af de retninger, der er tilgængelige i enum.

pakke Rutevejledning enum Rutevejledning {EAST, WEST, NORTH, SOUTH} offentlig klasse Edureka {offentlig statisk ugyldig hoved (String args []) {Kørselsvejledning = Kørselsvejledning.NORTH hvis (dir == Kørselsvejledning.ØST) {System.out.println ( 'Retning: Øst')} ellers hvis (dir == Rutevejledning.VEST) {System.out.println ('Retning: Vest')} ellers hvis (dir == Rutevejledning.NORTH) {System.out.println ('Retning : Nord ')} andet {System.out.println (' Retning: Syd ')}}}

//Produktion:

Sigektion: Nord

Forskellige metoder brugt med enum

Værdier (): Når du opretter en enum, Java-kompilator internt tilføjer værdier () metode. Denne metode returnerer en array indeholdende alle værdierne i enum.

// Syntaks:

offentlige statiske enum-type [] værdier ()

Vi finder ud af indeksværdien af ​​et bestemt element i en matrix.

pakkeværdier enum Color {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Colour col: arr) {System.out.println ( col + 'ved indeks' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//Produktion:

RØD ved indeks 0
GRØN ved indeks 1
BLÅ ved indeks 2
NET

Værdi af(): Dettemetoden bruges til at returnere optællingskonstanten, hvis værdi er lig med bestået som et argument, mens du kalder denne metode.

// Syntaks:

public static enum-type valueOf (String str)

Her finder vi prisen på en bestemt telefon baseret på det input, vi sender til strengen.

pakkeværdier af enum Mobil {Samsung (1099), Apple (1250), Google (1325) int pris Mobil (int p) {pris = p} int showPrice () {returpris}} offentlig klasse Edureka {offentlig statisk ugyldig main (String args []) {System.out.println ('CellPhone List:') for (Mobile m: Mobile.values ​​()) {System.out.println (m + 'omkostninger' + m.showPrice () + 'dollars' )} Mobil ret ret = Mobile.valueOf ('Samsung') System.out.println ('Valgt:' + ret)}}

//Produktion:

Samsung koster 1099 dollars
Apple koster 1250 dollars
Google koster 1325 dollars
Valgt: Samsung

Ordinær (): Java-tolken tilføjer ordinal () metode internt, når den opretter en enum. Metoden ordinal () returnerer indeks af enumværdien.

// Syntaks:

offentlig endelig ordinær ()

Her finder vi ud af indeksværdien af ​​et bestemt element i en matrix. og også placeringen af ​​kirsebærfrugten.

Pakke ordinal enum Frugter {Apple, Banana, Cherry, Date, Elderberry} enum Grøntsager {Gulerod, Rødbeder, Bønner, Tomat, Løg} offentlig klasse Edureka {offentlig statisk ugyldig hoved (String [] args) {Frugt [] fru = Frugt. værdier () for (Frugter fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Frugter f1, f2, f3 f1 = Frugter. Æble f2 = Frugter. Kirsebær f3 = Frugter. Æble hvis (f2.compareTo (f1)> 0) {System.out.println (f2 + 'kommer efter' + f1)} Grøntsager v1 = Grøntsager. rødbeder hvis (f1.equals (v1)) {System.out.println (' Forkert ')}}}

//Produktion:

Apple: 0
Banan: 1
Kirsebær: 2
Dato: 3
Hyldebær: 4
Cherry kommer efter Apple

Fordele ved Enum

  • Enum i Java forbedres type sikkerhed
  • Enum er designet til at være let anvendelig i skifte sager
  • Enum kan være krydset
  • Enum kan have felter, metoder, og konstruktører
  • Enum kan implementere grænseflader
  • Enum kan ikke udvide en klasse fordi internt strækker det sig Enum klasse

Enum Usecase: Rock, Paper, Scissors Game

Vi bruger enum i Java for at skabe vores barndomsspil, sten (sten) papir og saks . Den følgende kode forklarer hvordan.

pakke Edureka import java.util.Random import java.util.Scanner enum HandSign {SCISSOR, PAPIR, 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 = ny Scanner (System.in) System.out.println ('nLad os begynde ... n') mens (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nDin tur (Indtast venligst s for en saks, p for papir, t for sten, q at afslutte): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} ellers hvis (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} ellers hvis (inChar == 'p') {playerMove = HandSign.PAPER} ellers hvis (inChar == 't') {playerMove = HandSign.STONE} andet {System.out.println ( 'nKontrol input og prøv igen! n') validInput = false}} mens (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt's My turn: SCISSORn')} ellers hvis (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's My turn: PAPERn')} ellers {computerMove = HandSign.STONE System.out.println ('nIt's My turn: STONEn')} hvis (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} ellers hvis (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nSississ klipper papir , Jeg vandt! N ') ++ numComputerWon} ellers hvis (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper wraps stone, I won! N ') ++ numComputerWon} ellers hvis (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone bryder sakse, jeg vandt! n') ++ numComputerWon} ellers {System.out.println ('nCongratulations. ..! Du vandt! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nAntal forsøg: '+ numTrials) System.out.printf (' Jeg vandt% d (%. 2f %%) . Du vandt% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Farvel !, håber du nød ..! ' )}}

//Produktion:

Lad os begynde ...
Sakspapir-sten
Din tur (Indtast venligst s for en saks, p for papir, t for sten, q for at afslutte):
s
Det er min tur: STEN
Stone bryder saks, jeg vandt!
Sakspapir-sten
Din tur (Indtast venligst s for en saks, p for papir, t for sten, q for at afslutte):
hvad
Antallet af forsøg: 1I vandt 1 (100,00%). Du vandt 0 (0,00%).
Farvel !, håber du nød ..!

Med dette slutter vi denne Java Enum-tutorial. Jeg håber, du har forstået Enum i Java og dens implementering gennem nogle eksempler i realtid.

Nu hvor du har forstået det enum grundlæggende gennem denne “Java Enum Tutorial” tjek af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edurekas Java J2EE- og SOA-kurser er designet til studerende og fagfolk, der ønsker at være Java-udvikler. Kurset er designet til at give dig et forspring i Java-programmering og træne dig til både kerne- og avancerede Java-koncepter sammen med forskellige Java-rammer som Hibernate & Forår .

Har du et spørgsmål til os? Nævn det i kommentarfeltet i denne 'Java Enum Tutorial' -blog, og vi vender tilbage til dig så hurtigt som muligt.