In Java zijn opsommingen (enums) een speciaal type dat wordt gebruikt om een groep benoemde constanten te definiëren.
- Enums helpen bij de leesbaarheid, onderhoudbaarheid en typeveiligheid in programma's door betekenisvolle namen toe te wijzen aan gehele waarden.
- Dit is vooral handig als we een kleine set mogelijke waarden hebben voor een item zoals routebeschrijving, dagen van de week, enz.
Een Enum maken
Syntaxis:
Javaenum EnumNaam {
relationele algebra in rdbmsCONSTANT1 CONSTANT2 CONSTANT3;
}
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Uitvoer
RED
Verklaring van enum in Java
Enum-declaratie kan buiten een klasse of binnen een klasse worden gedaan, maar niet binnen een methode.
1. Verklaring buiten de les
Zoals we in het bovenstaande voorbeeld hebben gezien, kunnen enums buiten een klasse worden gedeclareerd en rechtstreeks worden benaderd
2. Verklaring binnen een klas
Enums kunnen ook binnen een klasse worden gedeclareerd, maar niet binnen een methode.
Java
public class Test { enum Color { RED GREEN BLUE; } // Driver method public static void main(String[] args) { Color c1 = Color.RED; System.out.println(c1); } }
Uitvoer
RED
Eigenschappen van Enum op Java
Er zijn bepaalde eigenschappen gevolgd door Enum, zoals hieronder vermeld:
- Klassetype: Intern geïmplementeerd als klasse.
- Enum-constanten: Elke constante is een object van het type enum.
- Ondersteuning voor schakelaars: Kan worden gebruikt in switch-instructies.
- Impliciete modificatoren: Constanten zijn openbare statische finale.
- Erfenis: Enums kunnen geen klassen uitbreiden, maar kunnen wel interfaces implementeren.
Opsomming in een Switch-instructie
Enums kunnen in switch-instructies worden gebruikt om verschillende cases af te handelen op basis van de enum-constanten.
Javaimport java.io.*; class GFG{ // Enum Declared enum Color { RED GREEN BLUE YELLOW; } public static void main(String[] args){ Color var_1 = Color.YELLOW; // Switch case with Enum switch (var_1) { case RED: System.out.println('Red color'); break; case GREEN: System.out.println('Green color'); break; case BLUE: System.out.println('Blue color'); break; default: System.out.println('Other color'); } } }
Uitvoer
Other color
Enum met methoden en constructor
Bij enums kunnen constructors en methoden voor elke constante afzonderlijk worden uitgevoerd
Javaenum Color{ RED GREEN BLUE; private Color(){ System.out.println('Constructor called for: ' + this); } public void display(){ System.out.println('Color is: ' + this); } } public class Test{ public static void main(String[] args){ Color c1 = Color.RED; c1.display(); } }
Uitvoer
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Enum met abstracte methoden
Enums kunnen abstracte methoden declareren die elke constante moet implementeren.
Javaenum Day{ MONDAY{ public String getNumber(){ return '1st day'; } } FRIDAY{ public String getNumber(){ return '5th day'; } }; public abstract String getNumber(); } public class EnumTest { public static void main(String[] args){ System.out.println(Day.MONDAY.getNumber()); System.out.println(Day.FRIDAY.getNumber()); } }
Uitvoer
1st day 5th day
Enums herhalen met waarden()
Gebruik EnumType.values() om alle enum-constanten te doorlopen.
Javaenum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Uitvoer
RED GREEN BLUE
Enum en EnumSet (iteratie van specifiek bereik)
EnumSet.range() maakt iteratie over een specifiek bereik van enum-constanten mogelijk.
Javaimport java.util.EnumSet; public class EnumSetExample{ enum Day{ SUNDAY MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY; } public static void main(String[] args){ EnumSet<Day> workDays = EnumSet.range(Day.TUESDAY Day.FRIDAY); for (Day d : workDays){ System.out.println(d); } } }
Uitvoer
TUESDAY WEDNESDAY THURSDAY FRIDAY
Een klas aanmaken met een Enum-lid
We kunnen enums combineren met reguliere klassen om uw programmalogica te organiseren. Een enum kan een lidvariabele in een klasse zijn en methoden kunnen acties uitvoeren op basis van de enumwaarde.
Java/*package whatever //do not write package name here */ import java.io.*; enum Day { MONDAY TUESDAY WEDNESDAY THURSDAY FRIDAY SATURDAY SUNDAY } public class EnumTest { // Enum member variable Day day; // constructor which takes enum value public EnumTest(Day day) { this.day = day; } // method to execute action as per enum value public void tellItLikeItIs() { switch (day) { case MONDAY: System.out.println('Mondays are tough'); break; case TUESDAY: System.out.println('Tuesday are better'); break; case WEDNESDAY: System.out.println('Wednesday are okay'); break; case THURSDAY: System.out.println('Thursdays are hopeful'); break; case FRIDAY: System.out.println('Fridays are exciting'); break; case SATURDAY: System.out.println('Saturdays are relaxing'); break; case SUNDAY: System.out.println('Sunday are for rest'); break; default: System.out.println('Everyday are good'); break; } } public static void main(String[] args) { EnumTest firstDay = new EnumTest(Day.MONDAY); firstDay.tellItLikeItIs(); EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); thirdDay.tellItLikeItIs(); EnumTest fifthDay = new EnumTest(Day.FRIDAY); fifthDay.tellItLikeItIs(); EnumTest sixthDay = new EnumTest(Day.SATURDAY); sixthDay.tellItLikeItIs(); EnumTest seventhDay = new EnumTest(Day.SUNDAY); seventhDay.tellItLikeItIs(); } }
Uitvoer
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Uitleg:
Hoe str naar int te converteren
- De EnumTest-klasse in bovenstaande code is gemaakt met een lid van het type Day. Het heeft een constructor die Day enum als argument neemt en deze toewijst.
- De klasse heeft de methode tellItLikeItIs() die een bericht afdrukt op basis van de waarde van de dag.
- De hoofdmethode omvat objecten van EnumTest die verschillende Day-enumwaarden gebruiken en voor elk ervan de tellItLikeItIs()-methode aanroept.
OPMERKING: Het nieuwe sleutelwoord wordt gebruikt omdat EnumTest een gewone klasse is en geen enum, dus we maken instanties en geven de enum-waarde door aan de constructor ervan.