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 {
tipkopis foreach petljaKONSTANT1 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
sql klauzule
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.
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'); } } }
Izlaz
Other color
Enum s metodama i konstruktorom
Enumi mogu imati konstruktore i metode koje se izvode zasebno za svaku konstantu
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(); } }
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.
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()); } }
Izlaz
1st day 5th day
Ponavljanje enuma korištenjem values()
Upotrijebite EnumType.values() za prolazak kroz sve enum konstante.
Javaenum 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 dužina nizaJava
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.