enum Java nyelven

A Java-ban a felsorolások (enums) egy speciális típus, amelyet elnevezett konstansok csoportjának meghatározására használnak.

  • Az enumok segítik az olvashatóság karbantarthatóságát és a programok típusbiztonságát azáltal, hogy értelmes neveket rendelnek az egész értékekhez.
  • Főleg akkor hasznos, ha van egy kis lehetséges értékkészletünk egy tételhez, például útbaigazítás a hét napjaihoz stb.

Enum létrehozása

Szintaxis:

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

Kimenet
RED  

Az enum nyilatkozata Java nyelven

Az Enum deklaráció elvégezhető osztályon kívül vagy osztályon belül, de metóduson belül nem.

1. Nyilatkozat tanórán kívül

Amint a fenti példában láttuk, az enumok deklarálhatók egy osztályon kívül, és közvetlenül elérhetők

2. Nyilatkozat osztályon belül

Az enumok egy osztályon belül is deklarálhatók, de metóduson belül nem.

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

Kimenet
RED  

Az Enum tulajdonságai Java nyelven

Vannak bizonyos tulajdonságok, amelyeket az Enum követ, az alábbiak szerint:

  • Osztály típusa: Belsőleg osztályként valósítva meg.
  • Enum állandók: Minden konstans egy enum típusú objektum.
  • Kapcsoló támogatás: Használható switch utasításokban.
  • Implicit módosítók: A konstansok nyilvános statikus véglegesek.
  • Öröklés: Az Enumok nem bővíthetik ki az osztályokat, de interfészeket képesek megvalósítani.

Enum egy Switch nyilatkozatban

Az enum-ok a switch utasításokban használhatók különböző esetek kezelésére az enum konstansok alapján.

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

Kimenet
Other color  

Enum módszerekkel és konstruktorral

Az enumok konstruktorait és metódusait külön hajtják végre minden konstanshoz

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

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

Enum absztrakt módszerekkel

Az enumok absztrakt módszereket deklarálhatnak, amelyeket minden konstansnak meg kell valósítania.

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

Kimenet
1st day 5th day  

Sorszámok iterálása értékek() használatával

Használja az EnumType.values()-t az összes enum-konstans közötti ciklushoz.

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

Kimenet
RED GREEN BLUE  

Enum és EnumSet (specifikus tartomány iterációja)

Az EnumSet.range() lehetővé teszi az iterációt az enum állandók meghatározott tartományán.

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

Kimenet
TUESDAY WEDNESDAY THURSDAY FRIDAY  

Osztály létrehozása Enum taggal

Kombinálhatjuk az enumokat a normál órákkal, hogy rendszerezzük a program logikáját. Az enum lehet egy osztály tagváltozója, a metódusok pedig műveleteket hajthatnak végre az enum értéke alapján.

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

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

Magyarázat:

  • A fenti kód EnumTest osztálya Day típusú taggal jön létre. Konstruktora van, amely a Day enum-ot veszi argumentumnak, és hozzárendeli.
  • Az osztály rendelkezik a tellItLikeItIs() metódussal, amely a nap értéke alapján nyomtat üzenetet.
  • A fő metódus az EnumTest objektumaiból áll, amelyek különböző Day enum értékeket használnak, és mindegyiken meghívják a tellItLikeItIs() metódust.

JEGYZET: Az új kulcsszót azért használjuk, mert az EnumTest egy normál osztály, nem pedig enum, ezért példányokat hozunk létre, és az enum értéket adjuk át a konstruktorának.