enum v Javě

V Javě jsou výčty (výčty) speciální typ používaný k definování skupiny pojmenovaných konstant.

  • Výčty pomáhají při čitelnosti udržovatelnosti a bezpečnosti typů v programech tím, že celočíselným hodnotám přiřazují smysluplné názvy.
  • Hlavně užitečné, když máme malou sadu možných hodnot pro položku, jako jsou dny v týdnu atd.

Vytvoření Enum

Syntax:

enum Název_výčtu {

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  

Deklarace enum v Javě

Deklarace výčtu může být provedena mimo třídu nebo uvnitř třídy, ale ne uvnitř metody.

1. Prohlášení mimo třídu

Jak jsme viděli ve výše uvedeném příkladu, výčty lze deklarovat mimo třídu a přistupovat k nim přímo

2. Deklarace uvnitř třídy

Výčty lze také deklarovat uvnitř třídy, ale ne uvnitř metody.

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 Javě

Existují určité vlastnosti následované Enum, jak je uvedeno níže:

  • Typ třídy: Interně implementováno jako třída.
  • Výčtové konstanty: Každá konstanta je objekt typu enum.
  • Podpora přepínačů: Lze použít v příkazech switch.
  • Implicitní modifikátory: Konstanty jsou veřejné statické konečné.
  • Dědictví: Výčty nemohou rozšiřovat třídy, ale mohou implementovat rozhraní.

Enum v příkazu Switch

Výčty lze použít v příkazech switch ke zpracování různých případů na základě konstant výčtu.

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 metodami a konstruktorem

Výčty mohou mít konstruktory a metody spouštěné samostatně pro každou konstantu

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 metodami

Výčty mohou deklarovat abstraktní metody, které musí implementovat každá konstanta.

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  

Iterace výčtů pomocí value()

Použijte EnumType.values() k procházení všech konstant výčtu.

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 (konkrétní iterace rozsahu)

EnumSet.range() umožňuje iteraci přes určitý rozsah výčtových konstant.

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  

Vytvoření třídy s členem Enum

Můžeme kombinovat výčty s běžnými lekcemi a organizovat tak logiku vašeho programu. Výčet může být členská proměnná ve třídě a metody mohou provádět akce na základě hodnoty výčtu.

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  

Vysvětlení:

  • Třída EnumTest ve výše uvedeném kódu je vytvořena s členem typu Day. Má konstruktor, který vezme Day enum jako argument a přiřadí jej.
  • Třída má metodu tellItLikeItIs(), která vytiskne zprávu na základě hodnoty dne.
  • Hlavní metoda zahrnuje objekty EnumTest používající různé hodnoty Day enum a volání metody tellItLikeItIs() na každém z nich.

POZNÁMKA: Nové klíčové slovo se používá, protože EnumTest je běžná třída, nikoli výčet, takže vytváříme instance a předáváme hodnotu výčtu jeho konstruktoru.