logo

enum ב-Java

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

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

יצירת Enum

תַחבִּיר:



הדרכה של pyspark

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 לבנאי שלה.