enum ב-Java

ב-Java ספירות (enums) הן סוג מיוחד המשמש להגדרת קבוצה של קבועים בעלי שם.

  • Enums עוזרים לתחזוקה בקריאה ובטיחות הקלדה בתוכניות על ידי הקצאת שמות משמעותיים לערכי מספרים שלמים.
  • שימושי בעיקר כאשר יש לנו קבוצה קטנה של ערכים אפשריים עבור פריט כמו הוראות ימים בשבוע וכו'.

יצירת Enum

תַחבִּיר:

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

תְפוּקָה
RED  

הצהרת enum ב-Java

הצהרת Enum יכולה להיעשות מחוץ למחלקה או בתוך מחלקה אך לא בתוך מתודה.

1. הצהרה מחוץ לכיתה

כפי שראינו בדוגמה לעיל, ניתן להכריז על enums מחוץ למחלקה ולגשת אליהם ישירות

2. הצהרה בתוך כיתה

ניתן להצהיר על Enums גם בתוך מחלקה אבל לא בתוך מתודה.

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

תְפוּקָה
RED  

מאפיינים של Enum ב-Java

ישנם מאפיינים מסוימים ואחריהם Enum כפי שהוזכר להלן:

  • סוג מחלקה: מיושם פנימי ככיתה.
  • קבועי Enum: כל קבוע הוא אובייקט מסוג enum.
  • תמיכת מתגים: ניתן להשתמש בהצהרות מתג.
  • משנה משתמעים: הקבועים הם סופיים סטטיים ציבוריים.
  • יְרוּשָׁה: Enums לא יכול להרחיב מחלקות אבל יכול ליישם ממשקים.

Enum בהצהרת Switch

ניתן להשתמש ב-Enums בהצהרות מתג כדי לטפל במקרים שונים בהתבסס על קבועי ה-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'  );      }      }   }   

תְפוּקָה
Other color  

Enum עם שיטות ובנאי

ל-Enums יכולים להיות בנאים ושיטות שיבוצעו בנפרד עבור כל קבוע

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

תְפוּקָה
Constructor called for: RED Constructor called for: GREEN Constructor called for: BLUE Color is: RED  

Enum עם שיטות מופשטות

Enums יכולים להכריז על שיטות מופשטות שכל קבוע חייב ליישם.

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

תְפוּקָה
1st day 5th day  

איטרציה של Enums באמצעות ערכים()

השתמש ב-EnumType.values() כדי לעבור בלולאה בין כל קבועי ה-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  );      }      }   }   

תְפוּקָה
RED GREEN BLUE  

Enum ו-EnumSet (איטרציה של טווח ספציפי)

EnumSet.range() מאפשר איטרציה על פני טווח ספציפי של קבועי enum.

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

תְפוּקָה
TUESDAY WEDNESDAY THURSDAY FRIDAY  

יצירת כיתה עם חבר Enum

אנו יכולים לשלב רשימות עם שיעורים רגילים כדי לארגן את היגיון התוכנית שלך. enum יכול להיות משתנה איבר במחלקה ושיטות יכולות לבצע פעולות על סמך ערך ה-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  ();      }   }   

תְפוּקָה
Mondays are tough Wednesday are okay Fridays are exciting Saturdays are relaxing Sunday are for rest  

הֶסבֵּר:

  • מחלקת EnumTest בקוד לעיל נוצרת עם חבר מסוג Day. יש לו בנאי שלוקח את ה-Day enum כארגומנט ומקצה אותו.
  • למחלקה יש שיטה tellItLikeItIs() שמדפיסה הודעה על סמך ערך היום.
  • השיטה העיקרית כוללת אובייקטים של EnumTest באמצעות ערכי Day enum שונים וקריאה לשיטת tellItLikeItIs() בכל אחד מהם.

פֶּתֶק: מילת המפתח החדשה משמשת כי EnumTest היא מחלקה רגילה ולא enum ולכן אנו יוצרים מופעים ומעבירים את ערך ה-enum לבנאי שלה.