logo

enum in Java

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:



enumEnumNome {

COSTANTE1 COSTANTE2 COSTANTE3;

}



Java
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.

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');  }  } } 

Produzione
Other color 

Enum con metodi e costruttore

Le enumerazioni possono avere costruttori e metodi eseguiti separatamente per ciascuna costante

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();  } } 

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.

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());  } } 

Produzione
1st day 5th day 

Iterazione delle enumerazioni utilizzando i valori()

Utilizzare EnumType.values() per scorrere tutte le costanti enum.

Java
enum 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.

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);  }  } } 

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.