енум у Јави
У Јави енумерације (енумс) су посебан тип који се користи за дефинисање групе именованих константи.
- Енумови помажу у читљивости одржавања и сигурности типова у програмима додељивањем смислених имена целобројним вредностима.
- Углавном корисно када имамо мали скуп могућих вредности за ставку као што су упутства за дане у недељи итд.
Креирање енума
Синтакса:
Javaенум ЕнумНаме {
ЦОНСТАНТ1 ЦОНСТАНТ2 ЦОНСТАНТ3;
}
enum TrafficLight { RED GREEN YELLOW ; } public class Test { public static void main ( String [] args ){ TrafficLight x = TrafficLight . RED ; System . out . println ( x ); } }
Излаз
RED
Декларација енума у Јави
Декларација енума може да се уради ван класе или унутар класе, али не и унутар методе.
1. Декларација ван часа
Као што смо видели у горњем примеру, енуме се могу декларисати ван класе и приступити им директно
2. Декларација унутар класе
Енумови се такође могу декларисати унутар класе, али не и унутар методе.
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 ); } }
Излаз
RED
Својства Енума у Јави
Постоје одређена својства иза којих следи Енум као што је наведено у наставку:
- Тип класе: Интерно имплементиран као класа.
- Енум константе: Свака константа је објекат типа енум.
- Подршка за пребацивање: Може се користити у наредбама свитцх.
- Имплицитни модификатори: Константе су јавне статичке коначне.
- наследство: Енумс не може проширити класе, али може имплементирати интерфејсе.
Енум у наредби Свитцх
Енумови се могу користити у наредбама свитцх за руковање различитим случајевима на основу енум константи.
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' ); } } }
Излаз
Other color
Енум са методама и конструктором
Енумови могу имати конструкторе и методе које се извршавају засебно за сваку константу
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 (); } }
Излаз
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Енум са апстрактним методама
Енумови могу декларисати апстрактне методе које свака константа мора имплементирати.
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 ()); } }
Излаз
1st day 5th day
Понављање енума користећи вредности()
Користите ЕнумТипе.валуес() за петљу кроз све енум константе.
Java enum Color { RED GREEN BLUE ; } public class Test { public static void main ( String [] args ){ for ( Color c : Color . values ()){ System . out . println ( c ); } } }
Излаз
RED GREEN BLUE
Енум и ЕнумСет (итерација специфичног опсега)
ЕнумСет.ранге() дозвољава итерацију преко одређеног опсега енум константи.
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 ); } } }
Излаз
TUESDAY WEDNESDAY THURSDAY FRIDAY
Креирање класе са Енум чланом
Можемо комбиновати енуме са редовним часовима да организујемо логику вашег програма. Енум може бити променљива-члан у класи и методе могу да извршавају радње на основу вредности енума.
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 (); } }
Излаз
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Објашњење:
- Класа ЕнумТест у горњем коду је креирана са чланом типа Даи. Има конструктор који узима Даи енум као аргумент и додељује га.
- Класа има метод теллИтЛикеИтИс() који штампа поруку на основу вредности дана.
- Главни метод укључује објекте ЕнумТест-а користећи различите вредности Даи енума и позивајући метод теллИтЛикеИтИс() за сваки.
НАПОМЕНА: Нова кључна реч се користи зато што је ЕнумТест обична класа, а не енум, па креирамо инстанце и прослеђујемо вредност набрајања њеном конструктору.