enum v Jave

V Java sú enumerácie (enumy) špeciálnym typom používaným na definovanie skupiny pomenovaných konštánt.

  • Enumy pomáhajú pri udržiavaní čitateľnosti a bezpečnosti typov v programoch priraďovaním zmysluplných názvov k celočíselným hodnotám.
  • Je to užitočné najmä vtedy, keď máme malú množinu možných hodnôt pre položku, ako sú dni v týždni atď.

Vytvorenie Enum

Syntax:

enum Názov_čísla {

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

Výstup
RED  

Deklarácia enum v Jave

Deklaráciu enum možno vykonať mimo triedy alebo vnútri triedy, ale nie vo vnútri metódy.

1. Vyhlásenie mimo triedy

Ako sme videli vo vyššie uvedenom príklade, zoznamy môžu byť deklarované mimo triedy a prístupné priamo

2. Deklarácia v triede

Enumy môžu byť deklarované aj v rámci triedy, ale nie v rámci metódy.

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

Výstup
RED  

Vlastnosti Enum v Jave

Existujú určité vlastnosti, za ktorými nasleduje Enum, ako je uvedené nižšie:

  • Typ triedy: Interne implementované ako trieda.
  • Konštanty Enum: Každá konštanta je objektom typu enum.
  • Podpora prepínačov: Môže byť použitý v príkazoch switch.
  • Implicitné modifikátory: Konštanty sú verejné statické konečné.
  • Dedičnosť: Enumy nemôžu rozširovať triedy, ale môžu implementovať rozhrania.

Enum v príkaze Switch

Enumy možno použiť v príkazoch switch na spracovanie rôznych prípadov na základe enumových konštánt.

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

Výstup
Other color  

Enum s metódami a konštruktorom

Enumy môžu mať konštruktory a metódy spustené samostatne pre každú konštantu

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

Výstup
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED  

Enum s abstraktnými metódami

Enumy môžu deklarovať abstraktné metódy, ktoré musí implementovať každá konštanta.

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

Výstup
1st day 5th day  

Iterácia enumov pomocou hodnôt ()

Použite EnumType.values() na zacyklenie všetkých konštánt 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  );      }      }   }   

Výstup
RED GREEN BLUE  

Enum a EnumSet (špecifická iterácia rozsahu)

EnumSet.range() umožňuje iteráciu cez špecifický rozsah enumových konštánt.

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

Výstup
TUESDAY WEDNESDAY THURSDAY FRIDAY  

Vytvorenie triedy s členom Enum

Môžeme kombinovať enumy s bežnými triedami, aby sme organizovali logiku vášho programu. Enum môže byť členskou premennou v triede a metódy môžu vykonávať akcie na základe hodnoty 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  ();      }   }   

Výstup
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest  

Vysvetlenie:

  • Trieda EnumTest vo vyššie uvedenom kóde je vytvorená s členom typu Day. Má konštruktor, ktorý vezme Day enum ako argument a priradí ho.
  • Trieda má metódu tellItLikeItIs(), ktorá vypíše správu na základe hodnoty dňa.
  • Hlavná metóda zahŕňa objekty EnumTest pomocou rôznych hodnôt Day enum a volaním metódy tellItLikeItIs() pre každý z nich.

POZNÁMKA: Nové kľúčové slovo sa používa, pretože EnumTest je bežná trieda, nie enum, takže vytvárame inštancie a odovzdávame hodnotu enum jeho konštruktorovi.