enum i Java
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.
Java import 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
Java enum 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.
Java enum 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.
Java enum 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.
Java import 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.