enumeració en Java

A Java, les enumeracions (enums) són un tipus especial utilitzat per definir un grup de constants anomenades.

  • Les enumeracions ajuden a mantenir la llegibilitat i la seguretat de tipus als programes assignant noms significatius a valors enters.
  • Principalment útil quan tenim un petit conjunt de valors possibles per a un element com les indicacions dies de la setmana, etc.

Creació d'una enumeració

Sintaxi:

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

Sortida
RED  

Declaració d'enum en Java

La declaració d'enum es pot fer fora d'una classe o dins d'una classe, però no dins d'un mètode.

1. Declaració fora de la classe

Com hem vist a l'exemple anterior, les enumeracions es poden declarar fora d'una classe i accedir-hi directament

2. Declaració dins d'una classe

Les enumeracions també es poden declarar dins d'una classe però no dins d'un mètode.

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

Sortida
RED  

Propietats d'Enum a Java

Hi ha certes propietats seguides d'Enum, com s'esmenta a continuació:

  • Tipus de classe: Implementat internament com a classe.
  • Constants d'enumeració: Cada constant és un objecte del tipus enumeració.
  • Suport de canvi: Es pot utilitzar en declaracions de commutació.
  • Modificadors implícits: Les constants són públiques estàtiques finals.
  • Herència: Les enumeracions no poden estendre les classes, però poden implementar interfícies.

Enum en una declaració Switch

Les enumeracions es poden utilitzar en declaracions de commutació per gestionar diferents casos basats en les constants enumeracions.

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

Sortida
Other color  

Enum amb mètodes i constructor

Les enumeracions poden tenir constructors i mètodes executats per separat per a cada 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  ();      }   }   

Sortida
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED  

Enumeració amb mètodes abstractes

Els enumeradors poden declarar mètodes abstractes que cada constant ha d'implementar.

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

Sortida
1st day 5th day  

Iteració de enumeracions utilitzant values()

Utilitzeu EnumType.values() per recórrer totes les constants d'enumeració.

Java
   enum     Color  {      RED       GREEN       BLUE  ;       }   public     class   Test  {          public     static     void     main  (  String  []     args  ){          for     (  Color     c     :     Color  .  values  ()){          System  .  out  .  println  (  c  );      }      }   }   

Sortida
RED GREEN BLUE  

Enum i EnumSet (iteració d'interval específic)

EnumSet.range() permet la iteració sobre un rang específic de constants d'enumeració.

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

Sortida
TUESDAY WEDNESDAY THURSDAY FRIDAY  

Creació d'una classe amb un membre Enum

Podem combinar enumeracions amb classes regulars per organitzar la lògica del vostre programa. Una enumeració pot ser una variable membre d'una classe i els mètodes poden realitzar accions basades en el valor d'enum.

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

Sortida
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest  

Explicació:

  • La classe EnumTest del codi anterior es crea amb un membre del tipus Day. Té un constructor que pren Day enum com a argument i l'assigna.
  • La classe té el mètode tellItLikeItIs() que imprimeix el missatge en funció del valor del dia.
  • El mètode principal inclou objectes d'EnumTest utilitzant diferents valors d'enumeració de dia i cridant al mètode tellItLikeItIs() a cadascun.

NOTA: La paraula clau nova s'utilitza perquè EnumTest és una classe normal, no una enumeració, de manera que creem instàncies i passem el valor d'enum al seu constructor.