enum v Javi

V Javi so enumeracije (enums) posebna vrsta, ki se uporablja za definiranje skupine poimenovanih konstant.

  • Enumi pomagajo pri vzdržljivosti berljivosti in varnosti tipov v programih z dodeljevanjem smiselnih imen celoštevilskim vrednostim.
  • Uporabno predvsem takrat, ko imamo majhen nabor možnih vrednosti za element, kot so navodila za pot, dnevi v tednu itd.

Ustvarjanje enuma

Sintaksa:

enum EnumName {

KONSTANT1 KONSTANT2 KONSTANT3;

}

Java
   enum     TrafficLight     {      RED       GREEN       YELLOW  ;   }   public     class   Test  {          public     static     void     main  (  String  []     args  ){          TrafficLight     x     =     TrafficLight  .  RED  ;      System  .  out  .  println  (  x  );      }   }   

Izhod
RED  

Deklaracija enum v Javi

Deklaracijo enuma lahko naredite zunaj razreda ali znotraj razreda, ne pa znotraj metode.

1. Izjava izven razreda

Kot smo videli v zgornjem primeru, je enume mogoče deklarirati zunaj razreda in do njih neposredno dostopati

2. Deklaracija znotraj razreda

Enume je mogoče deklarirati tudi znotraj razreda, ne pa tudi znotraj 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  );      }   }   

Izhod
RED  

Lastnosti enuma v Javi

Obstajajo nekatere lastnosti, ki jim sledi Enum, kot je navedeno spodaj:

  • Vrsta razreda: Interno implementiran kot razred.
  • Enum konstante: Vsaka konstanta je objekt tipa enum.
  • Podpora stikala: Lahko se uporablja v stavkih switch.
  • Implicitni modifikatorji: Konstante so javne statične končne.
  • dedovanje: Enumi ne morejo razširiti razredov, lahko pa implementirajo vmesnike.

Enum v stavku Switch

Enume lahko uporabite v stavkih switch za obravnavanje različnih primerov na podlagi konstant 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'  );      }      }   }   

Izhod
Other color  

Enum z metodami in konstruktorjem

Enumi imajo lahko konstruktorje in metode, ki se izvajajo ločeno za vsako konstanto

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

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

Enum z abstraktnimi metodami

Enumi lahko deklarirajo abstraktne metode, ki jih mora implementirati vsaka 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  ());      }   }   

Izhod
1st day 5th day  

Ponavljanje enumov z uporabo values()

Uporabite EnumType.values() za zanko skozi vse enum konstante.

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

Izhod
RED GREEN BLUE  

Enum in EnumSet (iteracija določenega obsega)

EnumSet.range() omogoča iteracijo v določenem obsegu enum 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  );      }      }   }   

Izhod
TUESDAY WEDNESDAY THURSDAY FRIDAY  

Ustvarjanje razreda s članom Enum

Enume lahko združimo z rednimi razredi, da organiziramo logiko vašega programa. Enum je lahko spremenljivka člana v razredu, metode pa lahko izvajajo dejanja na podlagi vrednosti 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  ();      }   }   

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

Pojasnilo:

  • Razred EnumTest v zgornji kodi je ustvarjen s članom tipa Day. Ima konstruktor, ki vzame Day enum kot argument in ga dodeli.
  • Razred ima metodo tellItLikeItIs(), ki natisne sporočilo glede na vrednost dneva.
  • Glavna metoda vključuje objekte EnumTest, ki uporabljajo različne vrednosti enum Day in za vsakega kličejo metodo tellItLikeItIs().

OPOMBA: Nova ključna beseda je uporabljena, ker je EnumTest običajni razred in ne enum, zato ustvarimo primerke in posredujemo vrednost enum njegovemu konstruktorju.