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.