I Java er oppregninger (oppregninger) en spesiell type som brukes til å definere en gruppe navngitte konstanter.
- Enums hjelper til med å vedlikeholde lesbarheten og typesikkerhet i programmer ved å tildele meningsfulle navn til heltallsverdier.
- Hovedsakelig nyttig når vi har et lite sett med mulige verdier for en vare som veibeskrivelser, ukedager osv.
Opprette en enum
Syntaks:
Javaenum EnumName {
KONSTANT1 KONSTANT2 KONSTANT3;
}
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Produksjon
RED
Erklæring om enum i Java
Enum-erklæring kan gjøres utenfor en klasse eller inne i en klasse, men ikke inne i en metode.
1. Erklæring utenfor klassen
Som vi har sett i eksemplet ovenfor kan enums deklareres utenfor en klasse og få tilgang direkte
2. Erklæring i en klasse
Enums kan også deklareres inne i en klasse, men ikke i en metode.
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); } }
Produksjon
RED
Egenskaper til Enum i Java
Det er visse egenskaper etterfulgt av Enum som nevnt nedenfor:
- Klassetype: Internt implementert som klasse.
- Enum-konstanter: Hver konstant er et objekt av enum-typen.
- Bryterstøtte: Kan brukes i switch-setninger.
- Implisitte modifikatorer: Konstanter er offentlige statiske finaler.
- Arv: Enums kan ikke utvide klasser, men kan implementere grensesnitt.
Enum i en Switch Statement
Enums kan brukes i switch-setninger for å håndtere forskjellige tilfeller basert på enum-konstantene.
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'); } } }
Produksjon
Other color
Enum med metoder og konstruktør
Enums kan ha konstruktører og metoder utført separat for hver konstant
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(); } }
Produksjon
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Enum med abstrakte metoder
Enums kan erklære abstrakte metoder som hver konstant må implementere.
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()); } }
Produksjon
1st day 5th day
Iterering av oppregninger ved hjelp av verdier()
Bruk EnumType.values() for å gå gjennom alle enum-konstanter.
Javaenum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Produksjon
RED GREEN BLUE
Enum og EnumSet (spesifikt områdegjentakelse)
EnumSet.range() tillater iterasjon over et spesifikt område av enum-konstanter.
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); } } }
Produksjon
TUESDAY WEDNESDAY THURSDAY FRIDAY
Opprette en klasse med et Enum-medlem
Vi kan kombinere enums med vanlige klasser for å organisere programlogikken din. En enum kan være en medlemsvariabel i en klasse og metoder kan utføre handlinger basert på enum-verdien.
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(); } }
Produksjon
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Forklaring:
- EnumTest-klassen i koden ovenfor er opprettet med medlem av typen Day. Den har konstruktør som tar Day enum som et argument og tildeler det.
- Klassen har metode tellItLikeItIs() som skriver ut melding basert på verdien av dagen.
- Hovedmetoden inkluderer objekter av EnumTest som bruker forskjellige Day enum-verdier og kaller tellItLikeItIs()-metoden på hver.
NOTE: Det nye nøkkelordet brukes fordi EnumTest er en vanlig klasse, ikke en enum, så vi oppretter forekomster og sender enum-verdien til konstruktøren.