Java Enum Tutorial: Hva er det og hvordan implementerer du det?



Denne artikkelen om Java Enum Tutorial vil gi deg detaljert kunnskap om Enum-konstanter sammen med praktiske eksempler for bedre forståelse.

De Oppregning i er en måte å definere en klasse med faste og navngitte konstanter med deres respektive ved hjelp av nøkkelordet enum. I dette ' Java Enum Tutorial ”Artikkel, vil vi lære ådefinere Oppregning sammen medeksempler for bedre forståelse.

sortere int array c ++

Hva er oppregning?

Java Enums er klasser som har et fast sett med konstanter eller variabler som ikke har en tendens til å endres. Oppregningen i Java oppnås ved hjelp av nøkkelordet enum. Java enum konstanter er statisk og endelig implisitt. Enum-funksjonen er tilgjengelig siden JDK versjon 1.5.





Hvorfor trenger vi oppregning?

enum forbedrer typesikkerhet ved kompileringstidskontroll for å unngå feil ved kjøretid ved å unngå kjeleplatekode. For eksempel, hvis du må velge en mulighet av det minste antall tilgjengelige alternativer, si,

Jobb Type: (Kontrakt / Midlertidig / Fast)



Java enum opplæringsmedarbeider

Da ville det beste alternativet være å bruke en enum. Fordi enum kan enkelt brukes i bryteren. enum kan krysses. enum kan ha felt, konstruktører og metoder. Derfor, øker det kompileringstidskontrollen og unngår feil på grunn av innlevering av ugyldige konstanter, ettersom du allerede har dokumentert hvilke verdier som er lovlige som skal brukes.

Forskjeller mellom Enum og Class

Selv om en klasse og enum har lignende funksjonalitet i Java-miljø, er de forskjellige i noen få aspekter. La oss diskutere forskjellene



Enum Klasse
Enum-konstanter kan ikke overstyresKlassekonstanter kan overstyres
Enum støtter ikke oppretting av objekterKlasse støtter opprettelsen av objekter
Enum kan ikke utvide andre klasserEn klasse kan utvide andre klasser
enum cet redskapsgrensesnittEn klasse kan implementere grensesnitt


Praktiske eksempler på Enum

For å forstå enum på en mye bedre måte, la oss utføre noen praktiske eksempler basert på det følgende.

Definere oppregning i Java

Enum kan erklæres enten inne i en klasse eller utenfor en cla. Men det kan ikke erklæres i noen metode. La oss ta et lite eksempel for å forstå syntaksen, definisjonen og erklæringen.

Syntaks:

enum navn {konstanter}

I dette eksemplet har vi erklært hoved() metode innsiden enum

pakke definisjon offentlig klasse Edureka {enum Level {BAJA, KTM, YAMAHA} public static void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// Ouput

KTM

I dette eksemplet er hoved() metoden er erklært utenfor av enum.

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

//Produksjon:

YAMAHA

Enum brukt i Switch Case

Oppregning kan også brukes i en bryteruttalelse. Det er viktig at alle saksoppgavene må bruke konstanter fra samme enum som brukt av bryteruttalelsen. La oss sjekke et eksempel basert på dette.

Her vil vi erklære en enum med ukedagene som elementene, og vi vil overføre dataene i form av en streng for å skrive ut dataene i den matchende saken.

pakke byttet enum Dag {SUNDAY, MONDAY, TUESDAY, ONSDAY, 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 ('Hei, i dag er mandag') pause sak TIRSDAG: System.out.println ('Hei, i dag er tirsdag') pause sak ONSDAG: System.out.println ('Hei, i dag er onsdag ') break case TORSDAG: System.out.println (' Hei, i dag er torsdag ') break case FREDAG: System.out.println (' Hello, Today is Friday. ') break case LØRDAG: System.out.println (' Hei, i dag er din helg ') pause sak SØNDAG: System.out.println (' Hei, I dag er en ferie ') pause standard: System.out.println (' Vennligst skriv inn en gyldig dag. ') Pause}} offentlig statisk ugyldig hoved (String [] args) {String str = 'MONDAY' Edureka e1 = new Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

//Produksjon:

Hei, i dag er detmandag

Arv ved bruk av enum

I utgangspunktet noe enum er representert som en klasse som utvider den abstrakte klassen java.lang. Enum og har flere statiske medlemmer. Derfor er en enum kan ikke utvide noen annen klasse eller enum det er ikke flere arv . La oss utføre et eksempel for å forstå det på en bedre måte.

Her vil vi arve operativsystemet basert på telefonprodusenten.

pakke arv import 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 grensesnitt HTTPMethodConvertible {public String getHTTPMethodType ()} statisk enum LibraryEnum implementerer HTTPMethodConvertible {FIRST ('Google Pixel) 'Huawei'), TREDJE ('Apple 11 Pro') streng httpMethodType LibraryEnum (strengtelefon) {httpMethodType = telefon} offentlig streng getHTTPMethodType () {retur 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}}}

//Produksjon:

Google Pixel
Android One

Enum med tilpassede verdier

Enums har sine egne strengverdier som standard, vi kan også tilordne noen egendefinerte verdier til enums. La oss se på eksemplet nedenfor.

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

I eksemplet ovenfor kan vi se at Traffic enum har tre medlemmer. Nemlig

RØD APPELSIN og GRØNN med har sine egne forskjellige tilpassede verdier STOPP, VENT og henholdsvis.

Nå for å bruke samme type enum i kode forventes det at vi følger noen punkter som er:

  • Vi må skape parameterisert konstruktør for denne enumklassen. Fordi vi vet det enum klassens objekt kan ikke opprettes eksplisitt, så for initialisering bruker vi parameteriserte konstruktører.
  • De bygger kan ikke være publikum eller beskyttet den må ha privat eller misligholde modifikatorer. Hvis vi oppretter offentlig eller beskyttet, vil det tillate initialisering av mer enn ett objekt som er helt imot enum funksjonalitet.
  • Vi må lage en getter-metode for å få verdien av enums.

La oss gjennomføre et program basert på dette.

pakke trafikk enum TrafficSignal {RED ('STOPP'), GRØNN ('GO'), ORANGE ('WAIT') privat String handling offentlig String getAction () {return 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 ())}}

//Produksjon:

navn: RØD handling: STOPP
navn: GRØNN handling: GO
hanne: ORANGE handling: VENT

Enum i if-else-if uttalelser

La oss nå utføre et program basert på enum i if-else-if uttalelser. Her vil vi finne retningen for traversal ved å overføre verdiene av retninger som er tilgjengelige i enum.

pakke Veibeskrivelse enum Veibeskrivelse {EAST, WEST, NORTH, SOUTH} public class Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Retning: Øst')} annet hvis (dir == Veibeskrivelse.VEST) {System.out.println ('Retning: Vest')} ellers hvis (dir == Veibeskrivelse.NORTH) {System.out.println ('Retning : Nord ')} annet {System.out.println (' Retning: Sør ')}}}

//Produksjon:

Siksjon: Nord

Ulike metoder brukt med enum

Verdier (): Når du oppretter en enum, vil Java-kompilator internt legger til verdier () metode. Denne metoden returnerer en array inneholder alle verdiene til enum.

// Syntaks:

offentlige statiske enum-type [] verdier ()

Vi vil finne ut indeksverdien til et bestemt element i en matrise.

pakkeverdier 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 ( kol + 'ved indeks' + kol. ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//Produksjon:

servicenow tutorial for nybegynnere pdf

RØD ved indeks 0
GRØNN ved indeks 1
BLÅ ved indeks 2
NETT

Verdien av(): Dettemetoden brukes til å returnere oppregningskonstanten hvis verdi er lik gått som et argument mens du kaller denne metoden.

// Syntaks:

offentlig statisk enum-type valueOf (strengstreng)

Her finner vi kostnadene for en bestemt telefon basert på inngangen vi sender til strengen.

pakkeverdier 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:') for (Mobile m: Mobile.values ​​()) {System.out.println (m + 'kostnader' + m.showPrice () + 'dollars' )} Mobil ret ret = Mobile.valueOf ('Samsung') System.out.println ('Valgt:' + ret)}}

//Produksjon:

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

Ordinær (): Java-tolk legger til ordinær () metode internt når den skaper en enum. Ordinal () -metoden returnerer indeks av enumverdien.

// Syntaks:

offentlig endelig ordinær ()

Her vil vi finne ut indeksverdien til et bestemt element i en matrise. og også posisjonen til kirsebærfrukten.

Package ordinal enum Fruits {Apple, Banana, Cherry, Date, Elderberry} enum Vegetables {Gulrot, rødbeter, bønner, tomat, løk} public class Edureka {public static void main (String [] args) {Fruits [] fru = Fruits. verdier () for (Frukt fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} Frukt f1, f2, f3 f1 = Frukt. Eple f2 = Frukt. Kirsebær f3 = Frukt. Eple hvis (f2.compareTo (f1)> 0) {System.out.println (f2 + 'kommer etter' + f1)} Grønnsaker v1 = Grønnsaker. rødbeter hvis (f1.equals (v1)) {System.out.println (' Stemmer ikke') } } }

//Produksjon:

Apple: 0
Banan: 1
Kirsebær: 2
Dato: 3
Elderberry: 4
Cherry kommer etter Apple

Fordeler med Enum

  • Enum i Java forbedres type sikkerhet
  • Enum er designet for å være lett brukbar i bytte saker
  • Enum kan være krysset
  • Enum kan ha felt, metoder, og konstruktører
  • Enum kan implementere grensesnitt
  • Enum kan ikke utvide en klasse fordi internt strekker det seg Enum klasse

Enum Usecase: Rock, Paper, Scissors Game

Vi vil bruke enum i Java for å lage barndomsspillet vårt, steinpapir og saks . 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 = new Scanner (System.in) System.out.println ('nLa oss begynne ... n') mens (! gameOver) {System.out.printf ('% nSississ-Paper-Stonen') boolean validInput do {System.out.print ('nDin tur (Vennligst skriv inn s for en saks, p for papir, t for stein, q å slutte): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} annet hvis (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} annet hvis (inChar == 'p') {playerMove = HandSign.PAPER} annet hvis (inChar == 't') {playerMove = HandSign.STONE} annet {System.out.println ( 'nVennligst sjekk inngangen og prøv igjen! 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')} else {computerMove = HandSign.STONE System.out.println ('nIt's My turn: STONEn')} hvis (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} annet hvis (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nSississ kutter papir , Jeg vant! N ') ++ numComputerWon} annet hvis (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper wraps stone, I won! N ') ++ numComputerWon} annet hvis (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone bryter saks, jeg vant! n') ++ numComputerWon} ellers {System.out.println ('nCongratulations. ..! Du vant! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nAntall forsøk: '+ numTrials) System.out.printf (' Jeg vant% d (%. 2f %%) . Du vant% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Bye !, Håper du likte ..! ' )}}

//Produksjon:

La oss starte...
Saks-papir-stein
Din tur (Vennligst skriv inn s for en saks, p for papir, t for stein, q for å slutte):
s
Det er min tur: STEIN
Stone bryter saks, jeg vant!
Saks-papir-stein
Din tur (Vennligst skriv inn s for en saks, p for papir, t for stein, q for å slutte):
hva
Antall forsøk: 1 Jeg vant 1 (100,00%). Du vant 0 (0,00%).
Farvel !, Håper du likte ..!

Med dette kommer vi til en slutt på denne Java Enum Tutorial. Jeg håper du har forstått Enum i Java og implementeringen av den gjennom noen sanntidseksempler.

Nå som du har forstått det enum grunnleggende gjennom denne 'Java Enum Tutorial' sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk med mer enn 250 000 fornøyde elever spredt over hele verden. Edurekas Java J2EE- og SOA-opplærings- og sertifiseringskurs er designet for studenter og fagpersoner som ønsker å være Java-utvikler. Kurset er designet for å gi deg et forsprang i Java-programmering og trene deg for både kjerne- og avanserte Java-konsepter sammen med forskjellige Java-rammer som Hibernate & Vår .

Har du spørsmål til oss? Nevn det i kommentarfeltet i denne “Java Enum Tutorial” -bloggen, så kommer vi tilbake til deg så snart som mulig.