ב-Java ספירות (enums) הן סוג מיוחד המשמש להגדרת קבוצה של קבועים בעלי שם.
- Enums עוזרים לתחזוקה בקריאה ובטיחות הקלדה בתוכניות על ידי הקצאת שמות משמעותיים לערכי מספרים שלמים.
- שימושי בעיקר כאשר יש לנו קבוצה קטנה של ערכים אפשריים עבור פריט כמו הוראות ימים בשבוע וכו'.
יצירת Enum
תַחבִּיר:
הדרכה של pyspark
Javaenum EnumName {
CONSTANT1 CONSTANT2 CONSTANT3;
}
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.
Javaimport 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 יכולים להיות בנאים ושיטות שיבוצעו בנפרד עבור כל קבוע
Javaenum 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 יכולים להכריז על שיטות מופשטות שכל קבוע חייב ליישם.
Javaenum 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.
Javaenum 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 לבנאי שלה.