In Java le enumerazioni (enumerazioni) sono un tipo speciale utilizzato per definire un gruppo di costanti denominate.
- Le enumerazioni aiutano nella manutenibilità della leggibilità e nella sicurezza del tipo nei programmi assegnando nomi significativi a valori interi.
- Utile principalmente quando abbiamo un piccolo insieme di valori possibili per un elemento come le indicazioni stradali, i giorni della settimana, ecc.
Creazione di un'enumerazione
Sintassi:
JavaenumEnumNome {
COSTANTE1 COSTANTE2 COSTANTE3;
}
enum TrafficLight { RED GREEN YELLOW; } public class Test{ public static void main(String[] args){ TrafficLight x = TrafficLight.RED; System.out.println(x); } }
Produzione
RED
Dichiarazione di enum in Java
La dichiarazione enum può essere eseguita all'esterno di una classe o all'interno di una classe ma non all'interno di un metodo.
1. Dichiarazione fuori classe
Come abbiamo visto nell'esempio precedente, le enumerazioni possono essere dichiarate all'esterno di una classe e accessibili direttamente
2. Dichiarazione all'interno di una classe
Le enumerazioni possono anche essere dichiarate all'interno di una classe ma non all'interno di un metodo.
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); } }
Produzione
RED
Proprietà di Enum in Java
Ci sono alcune proprietà seguite da Enum come menzionato di seguito:
- Tipo di lezione: Implementato internamente come classe.
- Costanti di enumerazione: Ogni costante è un oggetto del tipo enum.
- Supporto per il passaggio: Può essere utilizzato nelle istruzioni switch.
- Modificatori impliciti: Le costanti sono finali statiche pubbliche.
- Eredità: Le enumerazioni non possono estendere le classi ma possono implementare le interfacce.
Enum in un'istruzione Switch
Le enumerazioni possono essere utilizzate nelle istruzioni switch per gestire casi diversi in base alle costanti enum.
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'); } } }
Produzione
Other color
Enum con metodi e costruttore
Le enumerazioni possono avere costruttori e metodi eseguiti separatamente per ciascuna costante
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(); } }
Produzione
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED
Enumerazione con metodi astratti
Le enumerazioni possono dichiarare metodi astratti che ciascuna costante deve implementare.
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()); } }
Produzione
1st day 5th day
Iterazione delle enumerazioni utilizzando i valori()
Utilizzare EnumType.values() per scorrere tutte le costanti enum.
Javaenum Color{ RED GREEN BLUE; } public class Test{ public static void main(String[] args){ for (Color c : Color.values()){ System.out.println(c); } } }
Produzione
RED GREEN BLUE
Enum ed EnumSet (iterazione di intervalli specifici)
EnumSet.range() consente l'iterazione su un intervallo specifico di costanti enum.
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); } } }
Produzione
TUESDAY WEDNESDAY THURSDAY FRIDAY
Creazione di una classe con un membro Enum
Possiamo combinare enumerazioni con classi regolari per organizzare la logica del tuo programma. Un'enumerazione può essere una variabile membro di una classe e i metodi possono eseguire azioni in base al valore dell'enumerazione.
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(); } }
Produzione
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest
Spiegazione:
- La classe EnumTest nel codice precedente viene creata con il membro di tipo Day. Ha un costruttore che accetta Day enum come argomento e lo assegna.
- La classe ha il metodo tellItLikeItIs() che stampa il messaggio in base al valore del giorno.
- Il metodo principale include oggetti di EnumTest utilizzando diversi valori di enumerazione Day e chiamando il metodo tellItLikeItIs() su ciascuno.
NOTA: La nuova parola chiave viene utilizzata perché EnumTest è una classe normale e non un'enumerazione, quindi creiamo istanze e passiamo il valore enum al suo costruttore.