enumerare în Java

Î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ă:

enumerare EnumName {

CONSTANT1 CONSTANT2 CONSTANT3;

}

Java
   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

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.

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

Ieșire
Other color  

Enum cu metode și constructor

Enumerările pot avea constructori și metode executate separat pentru fiecare constantă

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

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.

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

Ieșire
1st day 5th day  

Iterarea enumerarilor folosind values()

Utilizați EnumType.values() pentru a parcurge toate constantele enumerate.

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

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

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.

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

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.