enum u Javi
U Javi enumeracije (enums) su posebna vrsta koja se koristi za definiranje grupe imenovanih konstanti.
- Enumi pomažu u održavanju čitljivosti i sigurnosti tipa u programima dodjeljivanjem smislenih imena cjelobrojnim vrijednostima.
- Uglavnom korisno kada imamo mali skup mogućih vrijednosti za stavku kao što su upute za dane u tjednu itd.
Stvaranje enuma
Sintaksa:
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 ); } }
Izlaz
RED
Deklaracija enuma u Javi
Deklaracija enuma može se izvršiti izvan klase ili unutar klase, ali ne unutar metode.
1. Deklaracija izvan nastave
Kao što smo vidjeli u gornjem primjeru, enume se mogu deklarirati izvan klase i pristupiti im se izravno
2. Deklaracija unutar klase
Enume se također mogu deklarirati unutar klase, ali ne i unutar 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 ); } }
Izlaz
RED
Svojstva enuma u Javi
Postoje određena svojstva iza kojih slijedi Enum kao što je navedeno u nastavku:
- Vrsta klase: Interno implementirano kao klasa.
- Enum konstante: Svaka konstanta je objekt tipa enum.
- Podrška za prekidače: Može se koristiti u naredbama switch.
- Implicitni modifikatori: Konstante su javne statičke konačne.
- nasljeđivanje: Enumi ne mogu proširiti klase, ali mogu implementirati sučelja.
Enum u naredbi Switch
Enum se može koristiti u switch izjavama za obradu različitih slučajeva na temelju enum konstanti.
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' ); } } }
Izlaz
Other color
Enum s metodama i konstruktorom
Enumi mogu imati konstruktore i metode koje se izvode zasebno za svaku konstantu
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 (); } }
Izlaz
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Enum s apstraktnim metodama
Enumi mogu deklarirati apstraktne metode koje svaka konstanta mora implementirati.
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 ()); } }
Izlaz
1st day 5th day
Ponavljanje enuma korištenjem values()
Upotrijebite EnumType.values() za prolazak kroz sve enum konstante.
Java enum Color { RED GREEN BLUE ; } public class Test { public static void main ( String [] args ){ for ( Color c : Color . values ()){ System . out . println ( c ); } } }
Izlaz
RED GREEN BLUE
Enum i EnumSet (Iteracija određenog raspona)
EnumSet.range() dopušta ponavljanje preko određenog raspona enum konstanti.
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 ); } } }
Izlaz
TUESDAY WEDNESDAY THURSDAY FRIDAY
Stvaranje klase s članom Enum
Možemo kombinirati popise s redovnim razredima kako bismo organizirali logiku vašeg programa. Enum može biti varijabla član u klasi, a metode mogu izvoditi akcije na temelju enum vrijednosti.
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 (); } }
Izlaz
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Obrazloženje:
- Klasa EnumTest u gornjem kodu stvorena je s članom tipa Day. Ima konstruktor koji uzima Day enum kao argument i dodjeljuje ga.
- Klasa ima metodu tellItLikeItIs() koja ispisuje poruku na temelju vrijednosti dana.
- Glavna metoda uključuje objekte EnumTest koristeći različite Day enum vrijednosti i pozivanje metode tellItLikeItIs() za svaki.
BILJEŠKA: Nova ključna riječ se koristi jer je EnumTest obična klasa, a ne enum, pa stvaramo instance i prosljeđujemo enum vrijednost njegovom konstruktoru.