ה Enum ב-Java הוא סוג נתונים המכיל קבוצה קבועה של קבועים.
ניתן להשתמש בו עבור ימי השבוע (ראשון, שני, שלישי, רביעי, חמישי, שישי ושבת), כיוונים (צפון, דרום, מזרח ומערב), עונה (אביב, קיץ, חורף וסתיו או סתיו ), צבעים (אדום, צהוב, כחול, ירוק, לבן ושחור) וכו'. לפי מוסכמות השמות של ג'אווה, כל הקבועים צריכים להיות באותיות גדולות. אז, יש לנו קבועים מנויים באותיות גדולות.
ניתן לחשוב על Java Enums כמחלקות שיש להן סט קבוע של קבועים (משתנה שאינו משתנה). קבועי ה-Java enum הם סטטיים וסופיים באופן מרומז. זה זמין מאז JDK 1.5.
מכונת מצב סופי
Enums משמשים ליצירת סוג נתונים משלנו כמו מחלקות. ה enum סוג נתונים (הידוע גם כ-Enumerated Data Type) משמש להגדרת enum ב-Java. שלא כמו C/C++, enum ב-Java זה יותר חָזָק . כאן, אנו יכולים להגדיר Enum בתוך המחלקה או מחוץ למחלקה.
Java Enum יורש באופן פנימי את כיתת Enum , כך שהוא לא יכול לרשת אף מחלקה אחרת, אבל הוא יכול ליישם ממשקים רבים. יכולים להיות לנו שדות, בנאים, שיטות ושיטות עיקריות ב-Java enum.
נקודות לזכור עבור Java Enum
- Enum משפר את בטיחות הסוג
- ניתן להשתמש ב-Enum בקלות במתג
- ניתן לעבור את Enum
- ל-Enum יכולים להיות שדות, בנאים ושיטות
- Enum עשויה ליישם ממשקים רבים אך אינה יכולה להרחיב אף מחלקה מכיוון שהיא מרחיבה באופן פנימי את מחלקת Enum
דוגמה פשוטה של Java Enum
class EnumExample1{ //defining the enum inside the class public enum Season { WINTER, SPRING, SUMMER, FALL } //main method public static void main(String[] args) { //traversing the enum for (Season s : Season.values()) System.out.println(s); }}בדוק את זה עכשיו
תְפוּקָה:
WINTER SPRING SUMMER FALL
הבה נראה דוגמה נוספת של Java enum שבה אנו משתמשים בשיטות value(), valueOf() ו-ordinal() של Java enum.
class EnumExample1{ //defining enum within class public enum Season { WINTER, SPRING, SUMMER, FALL } //creating the main method public static void main(String[] args) { //printing all enum for (Season s : Season.values()){ System.out.println(s); } System.out.println('Value of WINTER is: '+Season.valueOf('WINTER')); System.out.println('Index of WINTER is: '+Season.valueOf('WINTER').ordinal()); System.out.println('Index of SUMMER is: '+Season.valueOf('SUMMER').ordinal()); }}
תְפוּקָה:
WINTER SPRING SUMMER FALL Value of WINTER is: WINTER Index of WINTER is: 0 Index of SUMMER is: 2
הערה: מהדר Java מוסיף באופן פנימי שיטות ערכים(), valueOf() ו-ordinal() בתוך ה-enum בזמן ההידור. זה יוצר באופן פנימי מחלקה סטטית וסופית עבור ה-enum.
מה המטרה של שיטת values() ב-enum?
מהדר Java מוסיף באופן פנימי את שיטת ה-values() כאשר הוא יוצר enum. השיטה values() מחזירה מערך המכיל את כל הערכים של ה-enum.
להפוך את המיתר ב-java
מהי המטרה של שיטת valueOf() ב-enum?
מהדר Java מוסיף באופן פנימי את שיטת valueOf() כאשר הוא יוצר enum. השיטה valueOf() מחזירה את הערך של enum קבוע נתון.
מה המטרה של שיטת ה-ordinal() ב-enum?
מהדר Java מוסיף באופן פנימי את השיטה ordinal() כאשר הוא יוצר enum. השיטה ordinal() מחזירה את האינדקס של ערך ה-enum.
הגדרת Java Enum
ניתן להגדיר את ה-enum בתוך המחלקה או מחוצה לה מכיוון שהוא דומה למחלקה. נקודה-פסיק (;) בסוף קבועי ה-enum הם אופציונליים. לדוגמה:
enum Season { WINTER, SPRING, SUMMER, FALL }
אוֹ,
enum Season { WINTER, SPRING, SUMMER, FALL; }
שתי ההגדרות של Java enum זהות.
Java Enum דוגמה: מוגדר מחוץ לכיתה
enum Season { WINTER, SPRING, SUMMER, FALL } class EnumExample2{ public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); }}בדוק את זה עכשיו
תְפוּקָה:
WINTER
Java Enum דוגמה: מוגדר בתוך המחלקה
class EnumExample3{ enum Season { WINTER, SPRING, SUMMER, FALL; }//semicolon(;) is optional here public static void main(String[] args) { Season s=Season.WINTER;//enum type is required to access WINTER System.out.println(s); }}בדוק את זה עכשיו
תְפוּקָה:
WINTER
Java Enum דוגמה: שיטה ראשית בתוך Enum
אם תשים את השיטה main() בתוך ה-enum, תוכל להריץ את ה-enum ישירות.
enum Season { WINTER, SPRING, SUMMER, FALL; public static void main(String[] args) { Season s=Season.WINTER; System.out.println(s); } }
תְפוּקָה:
WINTER
אתחול ערכים ספציפיים לקבועי ה-enum
לקבועי ה-enum יש ערך התחלתי שמתחיל מ-0, 1, 2, 3 וכן הלאה. אבל, אנחנו יכולים לאתחל את הערך הספציפי לקבועי ה-enum על ידי הגדרת שדות ובנאים. כפי שצוין קודם לכן, ל-Enum יכולים להיות שדות, בנאים ושיטות.
דוגמה לציון ערך התחלתי לקבועי ה-enum
class EnumExample4{ enum Season{ WINTER(5), SPRING(10), SUMMER(15), FALL(20); private int value; private Season(int value){ this.value=value; } } public static void main(String args[]){ for (Season s : Season.values()) System.out.println(s+' '+s.value); }}בדוק את זה עכשיו
תְפוּקָה:
אובייקט ב-java
WINTER 5 SPRING 10 SUMMER 15 FALL 20
קונסטרוקטור מסוג enum הוא פרטי. אם אתה לא מצהיר על פרטי מהדר יוצר באופן פנימי בנאי פרטי.
enum Season{ WINTER(10),SUMMER(20); private int value; Season(int value){ this.value=value; } }
קוד פנימי שנוצר על ידי המהדר עבור הדוגמה שלעיל של סוג enum
final class Season extends Enum { public static Season[] values() { return (Season[])$VALUES.clone(); } public static Season valueOf(String s) { return (Season)Enum.valueOf(Season, s); } private Season(String s, int i, int j) { super(s, i); value = j; } public static final Season WINTER; public static final Season SUMMER; private int value; private static final Season $VALUES[]; static { WINTER = new Season('WINTER', 0, 10); SUMMER = new Season('SUMMER', 1, 20); $VALUES = (new Season[] { WINTER, SUMMER }); } }
האם נוכל ליצור את המופע של Enum לפי מילת מפתח חדשה?
לא, מכיוון שהוא מכיל בנאים פרטיים בלבד. |
האם יש לנו שיטה מופשטת ב-Enum?
כן כמובן! יכולות להיות לנו שיטות מופשטות ויכולים לספק את היישום של שיטות אלו.
Java Enum בהצהרת מתג
אנו יכולים ליישם enum על הצהרת switch כמו בדוגמה הנתונה:
דוגמה ליישום Enum על הצהרת switch
class EnumExample5{ enum Day{ SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} public static void main(String args[]){ Day day=Day.MONDAY; switch(day){ case SUNDAY: System.out.println('sunday'); break; case MONDAY: System.out.println('monday'); break; default: System.out.println('other day'); } }}בדוק את זה עכשיו
תְפוּקָה:
monday