În Java, enumerările (enumările) sunt un tip special folosit pentru a defini un grup de constante numite.
- Enumerările ajută la menținerea lizibilității și siguranța tipului în programe prin alocarea de nume semnificative valorilor întregi.
- În principal util atunci când avem un set mic de valori posibile pentru un articol, cum ar fi indicațiile zile ale săptămânii etc.
Crearea unei Enum
Sintaxă:
Javaenumerare EnumName {
cina vs cinaCONSTANT1 CONSTANT2 CONSTANT3;
}
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Ieșire
RED
Declarație de enumerare în Java
Declarația Enum poate fi făcută în afara unei clase sau în interiorul unei clase, dar nu în interiorul unei metode.
1. Declarație în afara clasei
După cum am văzut în exemplul de mai sus, enumerarile pot fi declarate în afara unei clase și accesate direct
versiuni Android
2. Declarație în interiorul unei clase
Enumerările pot fi, de asemenea, declarate în interiorul unei clase, dar nu în interiorul unei 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); } }
Ieșire
RED
Proprietățile lui Enum în Java
Există anumite proprietăți urmate de Enum, așa cum este menționat mai jos:
- Tipul clasei: Implementat intern ca o clasă.
- Constante enumerare: Fiecare constantă este un obiect de tip enum.
- Suport pentru comutare: Poate fi folosit în declarațiile switch.
- Modificatori impliciti: Constantele sunt finale statice publice.
- Moştenire: Enumările nu pot extinde clasele, dar pot implementa interfețe.
Enum într-o declarație Switch
Enumările pot fi folosite în instrucțiunile switch pentru a gestiona diferite cazuri bazate pe constantele enumerare.
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'); } } }
Ieșire
Other color
Enum cu metode și constructor
Enumerările pot avea constructori și metode executate separat pentru fiecare constantă
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(); } }
Ieșire
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Enum cu metode abstracte
Enumările pot declara metode abstracte pe care fiecare constantă trebuie să le implementeze.
filigran în cuvântJava
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()); } }
Ieșire
1st day 5th day
Iterarea enumerarilor folosind values()
Utilizați EnumType.values() pentru a parcurge toate constantele enumerate.
Javaenum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Ieșire
RED GREEN BLUE
Enum și EnumSet (iterație de interval specific)
EnumSet.range() permite iterația pe un interval specific de constante de enumerare.
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); } } }
Ieșire
TUESDAY WEDNESDAY THURSDAY FRIDAY
Crearea unei clase cu un membru Enum
Putem combina enumerarea cu clase obișnuite pentru a vă organiza logica programului. O enumerare poate fi o variabilă membru într-o clasă, iar metodele pot efectua acțiuni bazate pe valoarea enumerare.
coutJava
/*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(); } }
Ieșire
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Explicaţie:
- Clasa EnumTest din codul de mai sus este creată cu un membru de tip Day. Are un constructor care ia Day enum ca argument și îl atribuie.
- Clasa are metoda tellItLikeItIs() care afișează mesajul pe baza valorii zilei.
- Metoda principală include obiecte ale EnumTest folosind diferite valori de enumerare Day și apelând metoda tellItLikeItIs() pentru fiecare.
NOTA: Noul cuvânt cheie este folosit deoarece EnumTest este o clasă obișnuită, nu o enumerare, așa că creăm instanțe și transmitem valoarea enum constructorului său.