Java'da numaralandırma

Java'da numaralandırmalar (numaralandırmalar), adlandırılmış sabitlerden oluşan bir grubu tanımlamak için kullanılan özel bir türdür.

  • Numaralandırmalar, tamsayı değerlerine anlamlı adlar atayarak programlarda okunabilirliğin korunmasına ve tür güvenliğine yardımcı olur.
  • Özellikle haftanın yol tarifi günleri vb. gibi bir öğe için küçük bir olası değerler kümesine sahip olduğumuzda kullanışlıdır.

Enum Oluşturma

Sözdizimi:

enum EnumName {

SABİT1 SABİT2 SABİT3;

}

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

Çıkış
RED  

Java'da enum bildirimi

Enum bildirimi bir sınıfın dışında veya bir sınıfın içinde yapılabilir ancak bir yöntemin içinde yapılamaz.

1. Sınıf dışında bildirim

Yukarıdaki örnekte gördüğümüz gibi numaralandırmalar bir sınıfın dışında bildirilebilir ve doğrudan erişilebilir.

2. Sınıf içindeki bildirim

Numaralandırmalar ayrıca bir sınıf içinde de bildirilebilir ancak bir yöntemin içinde bildirilemez.

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

Çıkış
RED  

Java'da Enum'un Özellikleri

Aşağıda belirtildiği gibi Enum tarafından takip edilen belirli özellikler vardır:

  • Sınıf Türü: Dahili olarak sınıf olarak uygulanır.
  • Enum Sabitleri: Her sabit, enum türünün bir nesnesidir.
  • Anahtar Desteği: Switch ifadelerinde kullanılabilir.
  • Örtülü Değiştiriciler: Sabitler genel statik finaldir.
  • Miras: Enum'lar sınıfları genişletemez ancak arayüzleri uygulayabilir.

Switch İfadesinde Enum

Enum'lar, enum sabitlerine dayalı olarak farklı durumları işlemek için switch ifadelerinde kullanılabilir.

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

Çıkış
Other color  

Yöntemler ve Yapıcı ile Enum

Numaralandırmalarda her sabit için ayrı ayrı yürütülen yapıcılar ve yöntemler bulunabilir

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

Çıkış
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED  

Soyut Yöntemlerle Enum

Numaralandırmalar, her sabitin uygulaması gereken soyut yöntemleri bildirebilir.

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

Çıkış
1st day 5th day  

Değerleri () kullanarak Numaralandırmaları Yinelemek

Tüm enum sabitleri arasında geçiş yapmak için EnumType.values() öğesini kullanın.

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

Çıkış
RED GREEN BLUE  

Enum ve EnumSet (Belirli Aralık Yinelemesi)

EnumSet.range(), belirli bir numaralandırma sabiti aralığı üzerinde yinelemeye izin verir.

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

Çıkış
TUESDAY WEDNESDAY THURSDAY FRIDAY  

Enum Üyesiyle Sınıf Oluşturma

Program mantığınızı düzenlemek için numaralandırmaları normal sınıflarla birleştirebiliriz. Enum, bir sınıftaki üye değişken olabilir ve yöntemler, enum değerine dayalı eylemler gerçekleştirebilir.

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

Çıkış
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest  

Açıklama:

  • Yukarıdaki koddaki EnumTest sınıfı Day tipinin üyeleriyle oluşturulmuştur. Day enum'u argüman olarak alan ve onu atayan yapıcısı vardır.
  • Sınıfın, günün değerine göre mesaj basan tellItLikeItIs() yöntemi vardır.
  • Ana yöntem, farklı Day enum değerleri kullanan ve her birinde tellItLikeItIs() yöntemini çağıran EnumTest nesnelerini içerir.

NOT: EnumTest bir enum değil normal bir sınıf olduğu için new anahtar sözcüğü kullanılır, bu nedenle örnekler oluştururuz ve enum değerini yapıcısına aktarırız.