Java Enum-zelfstudie: wat is het en hoe implementeert u het?



Dit artikel over Java Enum-zelfstudie biedt u gedetailleerde kennis van Enum-constanten, samen met praktische voorbeelden voor een beter begrip.

De Opsomming in is een manier om een ​​klasse te definiëren met vaste en benoemde constanten met hun respectieve met behulp van het trefwoord opsomming. In deze ' Zelfstudie voor Java Enum ”Artikel, zullen we lerendefinieer Enumeration samen metvoorbeelden voor een beter begrip.

Wat is opsomming?

Java Enums zijn klassen met een vaste set constanten of variabelen die niet veranderen. De opsomming in Java wordt bereikt met behulp van het trefwoord opsomming. De Java opsomming constanten zijn statisch en laatste impliciet. De Enum-functie is beschikbaar sinds JDK versie 1.5.





Waarom hebben we een opsomming nodig?

opsomming verbetert typeveiligheid bij compilatietijdcontrole om fouten tijdens runtime te vermijden door standaardcode te vermijden. Als u bijvoorbeeld een mogelijkheid moet selecteren uit het minste aantal beschikbare opties,

Job Type: (Contract / Tijdelijk / Permanent)



Java enum tutorial medewerker

Dan is de beste optie het gebruik van een opsomming. Omdat opsomming kan gemakkelijk in de schakelaar worden gebruikt. opsomming kan worden doorkruist. opsomming kan hebben velden, constructeurs en methoden. Vandaar, het verhoogt de compilatietijdcontrole en vermijdt fouten als gevolg van het doorgeven van ongeldige constanten, aangezien u al hebt gedocumenteerd welke waarden legaal mogen worden gebruikt.

Verschillen tussen Enum en Class

Hoewel een klasse en een enum vergelijkbare functionaliteit hebben in de Java-omgeving, verschillen ze op een aantal aspecten. Laten we de verschillen bespreken



Enum Klasse
Enum-constanten kunnen niet worden overschrevenKlasseconstanten kunnen worden overschreven
Enum biedt geen ondersteuning voor het maken van objectenKlasse ondersteunt het maken van objecten
Enum kan geen andere klassen uitbreidenEen klas kan andere klassen uitbreiden
opsomming ceen werktuiginterfaceEen klasse kan Interface implementeren


Praktische voorbeelden van Enum

Om enum op een veel betere manier te begrijpen, laten we enkele praktische voorbeelden uitvoeren op basis van het volgende.

Opsomming definiëren in Java

Enum kan binnen een klasse of buiten een c worden gedeclareerdlaat. Maar het kan in geen enkele methode worden gedeclareerd. Laten we een klein voorbeeld nemen om de syntaxis, definitie en declaratie te begrijpen.

Syntaxis:

enum naam {constanten}

In dit voorbeeld hebben we de hoofd() methode binnen opsomming

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

// Uitgang

KTM

In dit voorbeeld is de hoofd() methode is gedeclareerd buiten van opsomming.

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

// Uitvoer:

YAMAHA

Enum gebruikt in Switch Case

Opsomming kan ook worden gebruikt in een switch-instructie. Het is belangrijk dat alle case-instructies constanten moeten gebruiken van dezelfde enum als gebruikt door de switch-instructie. Laten we op basis hiervan een voorbeeld bekijken.

Hier zullen we een enum declareren met dagen van de week als elementen en we zullen de gegevens doorgeven in de vorm van een string om de gegevens van het overeenkomende geval af te drukken.

pakket geschakeld enum Dag {ZONDAG, MAANDAG, DINSDAG, WOENSDAG, DONDERDAG, VRIJDAG, ZATERDAG} openbare les Edureka {Dag dag openbaar Edureka (Dag dag) {this.day = dag} openbare leegte dagIsLike () {schakelaar (dag) {case MAANDAG: System.out.println ('Hallo, vandaag is maandag') pauze-casus DINSDAG: System.out.println ('Hallo, vandaag is dinsdag') pauze-casus WOENSDAG: System.out.println ('Hallo, vandaag is woensdag ') pauze geval DONDERDAG: System.out.println (' Hallo, vandaag is donderdag ') pauze geval VRIJDAG: System.out.println (' Hallo, vandaag is vrijdag. ') pauze case ZATERDAG: System.out.println (' Hallo, Vandaag is je weekend ') pauze-geval ZONDAG: System.out.println (' Hallo, vandaag is een feestdag ') pauze standaard: System.out.println (' Voer een geldige dag in. ') Pauze}} public static void main (String [] args) {String str = 'MONDAY' Edureka e1 = nieuwe Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// Uitvoer:

Hallo, vandaag ismaandag

Overerving met enum

Kortom, elk opsomming wordt weergegeven als een klasse die de abstracte klasse java.lang uitbreidt. Enum en heeft verschillende statische leden. Daarom een opsomming kan geen andere klasse uitbreiden of opsomming er is geen veelvoud erfenissen . Laten we een voorbeeld uitvoeren om het op een betere manier te begrijpen.

Hier zullen we het besturingssysteem erven op basis van de telefoonmaker.

datum gegevenstype sql server
pakket overname import java.util.ArrayList import java.util.List openbare klasse Edureka {openbare statische leegte hoofd (String [] args) {Lijst overnemen = nieuwe ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) voor (HTTPMethodConvertible-element: inherit) {System.out.println (element.getHTTPMethodType ())}} statische interface HTTPMethodConvertible {public String getHTTPMethodType ()} statische opsomming LibraryEnum implementeert HTTPMethodConvertible {FIRST ('Google Pixel'), SECOND ( 'Huawei'), THIRD ('Apple 11 Pro') String httpMethodType LibraryEnum (String phone) {httpMethodType = phone} public String getHTTPMethodType () {return httpMethodType}} statische enum ClientEnum implementeert HTTPMethodConvertible {huawei ('HongMing OS'), apple ('iOS'), google ('Android One') String httpMethodType ClientEnum (String s) {httpMethodType = s} openbare String getHTTPMethodType () {return httpMethodType}}}

// Uitvoer:

Google Pixel
Android One

Enum met aangepaste waarden

Enums hebben standaard hun eigen tekenreekswaarden, we kunnen ook enkele aangepaste waarden aan enums toewijzen. Laten we het onderstaande voorbeeld eens bekijken.

enum Verkeer {RED ('STOP'), ORANGE ('WAIT'), GREEN ('GO')}

In het bovenstaande voorbeeld kunnen we zien dat Verkeersenum drie leden heeft. Namelijk,

ROOD ORANJE en GROEN met hun eigen verschillende aangepaste waarden STOP, WACHT en GAAN respectievelijk.

Om nu hetzelfde type enum in code te gebruiken, wordt van ons verwacht dat we enkele punten volgen die zijn:

  • We moeten creëren geparametriseerde constructor voor deze enum-klasse. Omdat we dat weten opsomming class's object kan niet expliciet worden gemaakt, dus voor het initialiseren gebruiken we een constructor met parameters.
  • De bouwer kan niet het publiek zijn of beschermd moeten zijn privaat of standaard modificatoren. Als we openbaar of beveiligd maken, kan meer dan één object worden geïnitialiseerd dat volledig tegen is enum functionaliteit.
  • We moeten een getter-methode creëren om de waarde van enums.

Laten we op basis hiervan een programma uitvoeren.

pakketverkeer enum TrafficSignal {RED ('STOP'), GREEN ('GO'), ORANGE ('WAIT') private String action public String getAction () {return this.action} private TrafficSignal (String action) {this.action = action}} public class Edureka {public static void main (String args []) {TrafficSignal [] signalen = TrafficSignal.values ​​() voor (TrafficSignal signaal: signalen) {System.out.println ('name:' + signal.name () + 'action:' + signal.getAction ())}}}

// Uitvoer:

naam: ROOD actie: STOP
naam: GROEN actie: GO
mannetjee: ORANJE actie: WACHT

Enum in if-else-if-instructies

Laten we nu een programma uitvoeren op basis van enum in if-else-if-instructies. Hier zullen we de verplaatsingsrichting vinden door de waarden van de richtingen in de enum door te geven.

pakket Routebeschrijving enum Routebeschrijving {EAST, WEST, NORTH, SOUTH} openbare klasse Edureka {openbare statische leegte hoofd (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'Direction: East')} anders if (dir == Directions.WEST) {System.out.println ('Direction: West')} else if (dir == Directions.NORTH) {System.out.println ('Direction : North ')} anders {System.out.println (' Direction: South ')}}}

// Uitvoer:

Zeggenction: Noord

Verschillende methoden die worden gebruikt met enum

Waarden (): Wanneer u een enum maakt, wordt het Java-compiler voegt intern de waarden () methode. Deze methode retourneert een array met alle waarden van de enum.

//Syntaxis:

openbare statische enum-type [] waarden ()

We zullen de indexwaarde van een bepaald element in een array achterhalen.

pakketwaarden enum Kleur {RED, GREEN, BLUE} public class Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() voor (Colour col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

// Uitvoer:

ROOD bij index 0
GROEN bij index 1
BLAUW bij index 2
NETTO

Waarde van(): Dezemethode wordt gebruikt om de opsommingsconstante te retourneren waarvan de waarde gelijk is aan de doorgegeven als argument bij het aanroepen van deze methode.

//Syntaxis:

openbare statische enum-type valueOf (String str)

Hier zullen we de kosten van een bepaalde telefoon vinden op basis van de invoer die we doorgeven aan de string.

pakketwaarden van enum Mobiel {Samsung (1099), Apple (1250), Google (1325) int prijs Mobiel (int p) {price = p} int showPrice () {retourprijs}} public class Edureka {public static void main (String args []) {System.out.println ('CellPhone List:') voor (Mobile m: Mobile.values ​​()) {System.out.println (m + 'kosten' + m.showPrice () + 'dollars' )} Mobile ret ret = Mobile.valueOf ('Samsung') System.out.println ('Selected:' + ret)}}

// Uitvoer:

Samsung kost 1099 dollar
Apple kost 1250 dollar
Google kost 1325 dollar
Geselecteerd: Samsung

Ordinal (): De Java-interpreter voegt het ordinaal () methode intern wanneer het een opsomming. De ordinal () - methode retourneert de inhoudsopgave van de enum-waarde.

//Syntaxis:

openbare finale int ordinale ()

Hier zullen we de indexwaarde van een bepaald element in een array achterhalen. en ook de positie van de kersenfruit.

Pakket ordinale opsomming Fruit {Appel, Banaan, Kers, Datum, Vlierbes} enum Groenten {Wortel, Rode biet, Bonen, Tomaat, Ui} openbare klasse Edureka {openbare statische leegte hoofd (String [] args) {Fruits [] fru = Fruit. waarden () voor (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 + 'komt na' + f1)} Vegetables v1 = Vegetables.Bootroot if (f1.equals (v1)) {System.out.println (' Niet correct') } } }

// Uitvoer:

Appel: 0
Banaan: 1
Kers: 2
Datum: 3
Vlierbes: 4
Cherry komt achter Apple aan

Voordelen van Enum

  • Enum in Java verbetert type veiligheid
  • Enum is zo ontworpen dat het gemakkelijk kan worden gebruikt in schakelkasten
  • Enum kan zijn doorkruist
  • Enum kan hebben velden, methoden, en constructeurs
  • Enum kan worden geïmplementeerd interfaces
  • Enum kan een klasse omdat het intern zich uitbreidt Enum klasse

Enum Usecase: Rock, Paper, Scissors Game

We zullen gebruiken opsomming in Java om ons kinderspel te maken, het steen (steen) papier en de schaar . De volgende code legt uit hoe.

pakket 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 = nieuw Random () boolean gameOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = nieuwe scanner (System.in) System.out.println ('nLaten we beginnen ... n') while (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') boolean validInput do {System.out.print ('nJe beurt (voer s in voor een schaar, p voor papier, t voor steen, q te stoppen): 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} anders {System.out.println ( 'nControleer de invoer en probeer het opnieuw! 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 ('nHet is mijn beurt: PAPERn')} anders {computerMove = HandSign.STONE System.out.println ('nHet is mijn beurt: 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 snijdt papier , I won! N ') ++ numComputerWon} else if (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper wraps stone, I won! N ') ++ numComputerWon} else if (computerMove == HandSign.STONE & amp & amp playerMove == HandSign.SCISSOR) {System.out.println ('nStone breekt schaar, ik heb gewonnen! n') ++ numComputerWon} else {System.out.println ('nCongratulations. ..! You won! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nThe number of trials: '+ numTrials) System.out.printf (' I won% d (%. 2f %%) . Je hebt% d (%. 2f %%) gewonnen.% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' Tot ziens! Ik hoop dat je genoten hebt ..! ' )}}

// Uitvoer:

Laten we beginnen...
Schaar-papier-steen
Jouw beurt (voer s in voor een schaar, p voor papier, t voor steen, q om te stoppen):
s
Het is mijn beurt: STONE
Steen breekt schaar, ik heb gewonnen!
Schaar-papier-steen
Jouw beurt (voer s in voor een schaar, p voor papier, t voor steen, q om te stoppen):
wat
Het aantal proeven: 1Ik won er 1 (100,00%). Je hebt 0 (0,00%) gewonnen.
Dag !, Ik hoop dat je genoten hebt ..!

Hiermee komen we aan het einde van deze Java Enum Tutorial. Ik hoop dat je de Enum in Java en de implementatie ervan aan de hand van enkele real-time voorbeelden hebt begrepen.

Nu je het hebt begrepen opsomming basisbeginselen door middel van deze 'Java Enum Tutorial' bekijk de door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. Edureka's Java J2EE- en SOA-trainings- en certificeringscursussen zijn bedoeld voor studenten en professionals die Java-ontwikkelaar willen worden. De cursus is ontworpen om u een voorsprong te geven in het programmeren van Java en u te trainen in zowel kern- als geavanceerde Java-concepten, samen met verschillende Java-frameworks zoals Hibernate & De lente .

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van deze 'Java Enum Tutorial' -blog en we nemen zo snel mogelijk contact met u op.