מדריך Java Enum: מה זה וכיצד ליישם אותו?



מאמר זה בהדרכת Java Enum יספק לך ידע מפורט על קבועי Enum יחד עם דוגמאות מעשיות להבנה טובה יותר.

ה ספירה ב היא דרך להגדיר מעמד עם קבועים קבועים ושמם בהתאמה שלהם באמצעות מילת המפתח enum. בזה ' מדריך Java Enum מאמר, נלמדלהגדיר את המספר יחד עםדוגמאות להבנה טובה יותר.

מהי ספירה?

Java Enums הם מחלקות הכוללות קבוצה קבועה של קבועים או משתנים שאינם נוטים לשנות. הספירה ב- Java מושגת באמצעות מילת המפתח enum. הג'אווה enum קבועים הם סטָטִי ו סופי במשתמע. התכונה Enum זמינה מאז גרסת JDK 1.5.





מדוע אנו זקוקים למניין?

enum משפר את בטיחות הסוגים בבדיקת זמן הידור כדי למנוע שגיאות בזמן הריצה על ידי הימנעות מקוד הדוד. לדוגמא, אם אתה צריך לבחור אפשרות אחת מתוך המספר הפחות זמין של אפשרויות, אמור,

עבודה סוּג: (חוֹזֶה / זמני / קבוע)



עובד הדרכת Java enum

ואז האפשרות הטובה ביותר תהיה שימוש ב- enum. כי enum יכול לשמש בקלות במתג. enum ניתן לעבור. enum פחית יש שדות, בונים ושיטות. לָכֵן, זה מגדיל בדיקת זמן הידור ונמנע משגיאות עקב העברת קבועים לא חוקיים, כפי שכבר תיעדת אילו ערכים הם חוקיים לשימוש.

ההבדלים בין אנום למעמד

אף על פי שלכיתה ואנומה יש פונקציונליות דומה בסביבת ג'אווה, הם שונים בכמה היבטים. בואו נדון בהבדלים



כיצד להשתמש ב - Java
Enum מעמד
אי אפשר לעקוף קבועי אנוםניתן לבטל קבועי כיתות
Enum אינו תומך ביצירת אובייקטיםהכיתה תומכת ביצירת אובייקטים
Enum לא יכול להרחיב שיעורים אחריםכיתה יכולה להרחיב שיעורים אחרים
אנום גממשק יישומיםכיתה יכולה ליישם ממשק


דוגמאות מעשיות ל- Enum

עכשיו, כדי להבין את enum בצורה הרבה יותר טובה, הבה נבצע כמה דוגמאות מעשיות המבוססות על הדברים הבאים.

הגדרת ספירה ב- Java

ניתן להכריז על Enum בתוך כיתה או מחוץ ל- cלתת. אך, לא ניתן להכריז על כך בשום שיטה. בואו ניקח דוגמא קטנה להבנת התחביר, ההגדרה וההצהרה שלו.

תחביר:

שם enum {קבועים}

בדוגמה זו הכרזנו על רָאשִׁי() שיטה בְּתוֹך enum

הגדרת חבילה מחלקה ציבורית אדוריקה {enum Level {BAJA, KTM, YAMAHA} public static public void main (String [] args) {Level myVar = Level.KTM System.out.println (myVar)}}

// אופוט

KTM

בדוגמה זו, רָאשִׁי() שיטה מוכרזת בחוץ של enum.

הגדרת חבילה enum צבע {BAJAJ, KTM, YAMAHA} מחלקה ציבורית אדוריקה {public static void main (String [] args) {Bike b1 = Color.YAMAHA System.out.println (b1)}}

//תְפוּקָה:

ימאהה

Enum המשמש במקרה מתג

ניתן להשתמש במניין גם בהצהרת מתג. חשוב שכל הצהרות המקרה חייבות להשתמש בקבועים מאותו האנומר שבו השתמשו בהצהרת המתג. הבה נבדוק דוגמה על בסיס זה.

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

החבילה התחלפה ביום {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, Friday, SATURDAY} class public Edureka {Day day public Edureka (Day day) {this.day = day} public void dayIsLike () {switch (day) {case יום שני: מקרה הפסקה של System.out.println ('היי, היום זה יום שני') יום שלישי: System.out.println ('היי, היום יום שלישי') מקרה הפסקה יום רביעי: System.out.println ('היי, היום הוא יום רביעי ') מקרה הפסקה יום חמישי: System.out.println (' היי, היום זה יום חמישי ') הפסקה של יום שישי: System.out.println (' שלום, היום זה יום שישי '.) הפסקה של יום שבת: System.out.println (' היי, היום זה סוף השבוע שלך ') מקרה הפסקה יום ראשון: System.out.println (' היי, היום זה חג ') ברירת מחדל הפסקה: System.out.println (' אנא הזן יום חוקי. ') הפסקה}} סטטי ציבורי void main (String [] args) {String str = 'MONDAY' Edureka e1 = Edureka new (Day.valueOf (str)) e1.dayIsLike ()}}

//תְפוּקָה:

היי, היום זהיוֹם שֵׁנִי

ירושה באמצעות enum

בעיקרון, כל אחד enum מיוצג ככיתה המרחיבה את הכיתה המופשטת java.lang. Enum ויש לו כמה חברים סטטיים. לכן, an enum לא יכול להאריך שום מעמד אחר או enum אין מכפיל ירושות . הבה נבצע דוגמה להבנתה בצורה טובה יותר.

כאן ננחל את מערכת ההפעלה על בסיס יצרנית הטלפונים.

ההבדל בין xml ל- html
ייבוא ​​ירושה חבילה java.util.ArrayList ייבוא ​​java.util.List מחלקה ציבורית אדוריקה {public static void main (String [] args) {List inherit = new ArrayList () inherit.add (LibraryEnum.FIRST) inherit.add (ClientEnum. google) for (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}} ממשק סטטי HTTPMethodConvertible {public String getHTTPMethodType ()} Enum enatic LibraryEnum מיישם HTTPMethodConvertible {FIRST ('Google Pixel) 'Huawei'), שלישית ('Apple 11 Pro') מחרוזת httpMethodType LibraryEnum (טלפון מחרוזת) {httpMethodType = טלפון} מחרוזת ציבורית getHTTPMethodType () {return httpMethodType}} enum enum ClientEnum מיישם HTTPMethodConvertible {huawei ('מערכת ההפעלה של HongMing'), apple ('iOS'), google ('Android One') מחרוזת httpMethodType ClientEnum (מחרוזות s) {httpMethodType = s} מחרוזת ציבורית getHTTPMethodType () {return httpMethodType}}}

//תְפוּקָה:

פיקסל של גוגל
Android One

Enum עם ערכים מותאמים אישית

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

enum Traffic {RED ('STOP'), ORANGE ('WAIT'), GREEN ('GO')}

בדוגמה שלעיל אנו יכולים לראות כי Enum Traffic כולל שלושה חברים. כלומר,

אדום, כתום ו ירוק עם ערכים מותאמים אישית שונים משלהם עצור, המתן ו ללכת בהתאמה.

כעת כדי להשתמש באותו סוג של enum בקוד אנו צפויים לעקוב אחר כמה נקודות שהן:

  • אנחנו צריכים ליצור בנאי פרמטרי לשיעור האנומר הזה. כי אנחנו יודעים את זה enum לא ניתן ליצור את האובייקט של הכיתה במפורש ולכן לצורך אתחול אנו משתמשים בבנאי פרמטרי.
  • ה בּוֹנֶה לא יכול להיות הציבור או להיות מוגן עליו להיות פְּרָטִי אוֹ בְּרִירַת מֶחדָל משנים. אם ניצור ציבורי או מוגן, זה יאפשר לבצע אתחול של יותר מאובייקטים שהם לגמרי נגד פונקציונליות enum.
  • עלינו ליצור שיטת גטר לקבלת הערך של enums.

בואו נבצע תוכנית על בסיס זה.

תנועת חבילה enum TrafficSignal {RED ('STOP'), ירוק ('GO'), ORANGE ('WAIT') פרטי פעולת מחרוזת ציבורית מחרוזת getAction () {להחזיר this.action} TrafficSignal פרטית (פעולת מחרוזת) {this.action = פעולה}} מחלקה ציבורית אדוריקה {ציבורי ריק סטטי ראשי (טענות מחרוזת []) {TrafficSignal [] אותות = TrafficSignal.values ​​() עבור (TrafficSignal signal: signals) {System.out.println ('name:' + signal.name () + 'פעולה:' + signal.getAction ())}}}

//תְפוּקָה:

שם: פעולה אדומה: עצור
שם: פעולה ירוקה: GO
זָכָרה: פעולה כתומה: המתן

Enum בהצהרות אם-אם-אם

עכשיו, בואו נבצע תוכנית המבוססת על enum בהצהרות אם-אם-אם. כאן נמצא את כיוון המעבר על ידי העברת ערכי הכיוונים הקיימים באומה.

חבילה כיוונים enum כיוונים {EAST, WEST, NORTH, SOUTH} class public Edureka {public static void main (String args []) {Directions dir = Directions.NORTH if (dir == Directions.EAST) {System.out.println ( 'כיוון: מזרח')} אחרת אם (dir == Directions.WEST) {System.out.println ('כיוון: West')} אחר אם (dir == Directions.NORTH) {System.out.println ('כיוון : צפון ')} אחר {System.out.println (' כיוון: דרום ')}}}

//תְפוּקָה:

אמרקטיון: צפון

שיטות שונות המשמשות עם enum

ערכים (): כשאתה יוצר enum, ה- מהדר Java פנימי מוסיף את ערכים () שיטה. שיטה זו מחזירה מַעֲרָך המכיל את כל ערכי האנומה.

//תחביר:

ערכי [enum] סוג סטטי ציבורי ()

נגלה את ערך האינדקס של אלמנט מסוים במערך.

ערכי חבילה enum צבע {RED, GREEN, BLUE} class public Edureka {public static void main (String [] args) {Color arr [] = Color.values ​​() for (Colour col: arr) {System.out.println ( col + 'באינדקס' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

//תְפוּקָה:

אדום באינדקס 0
ירוק באינדקס 1
כחול באינדקס 2
נֶטוֹ

ערך של(): זֶההשיטה משמשת להחזרת קבוע המספור שערכו שווה ל- הועבר כוויכוח תוך כדי קריאה לשיטה זו.

//תחביר:

ערך סטטי ציבורי enum valueOf (מחרוזת str)

כאן נמצא את העלות של טלפון מסוים על סמך הקלט שאנו מעבירים למחרוזת.

ערכי חבילה של enum Mobile {Samsung (1099), Apple (1250), Google (1325) int מחיר Mobile (int p) {price = p} int showPrice () {return return}} class public Edureka {public static void main (String args []) {System.out.println ('רשימת טלפונים סלולריים:') עבור (Mobile m: Mobile.values ​​()) {System.out.println (m + 'עולה' + m.showPrice () + 'דולרים' )} Ret ret mobile = Mobile.valueOf ('Samsung') System.out.println ('נבחר:' + ret)}}

//תְפוּקָה:

סמסונג עולה 1099 דולר
אפל עולה 1250 דולר
גוגל עולה 1325 דולר
נבחר: סמסונג

סוֹדֵר(): מתורגמן Java מוסיף את סוֹדֵר() שיטה פנימית כאשר היא יוצרת enum. שיטת ordinal () מחזירה את אינדקס של ערך האנום.

ההבדל בין דריסה לעומס יתר

//תחביר:

ציבורי גמר ציבורי ()

כאן נגלה את ערך האינדקס של אלמנט מסוים במערך. וגם, המיקום של פרי הדובדבן.

אריזת פירות אנומליים מסודרים {תפוח עץ, בננה, דובדבן, תמרים, סמבוק} ירקות ענום {גזר, סלק, שעועית, עגבניה, בצל} סוג ציבורי אדוריקה {ציבורי ריק סטטי (מחרוזת [] טענות) {פירות [] fru = פירות ערכים () עבור (פירות fr: fru) {System.out.println (fr + ':' + fr.ordinal ())} פירות f1, f2, f3 f1 = פירות. תפוח f2 = פירות. שרי שרי 3 = פירות. תפוח אם (f2.compareTo (f1)> 0) {System.out.println (f2 + 'בא אחרי' + f1)} ירקות v1 = ירקות. סלק אם (f1.equals (v1)) {System.out.println (' שגוי ')}}}

//תְפוּקָה:

אפל: 0
בננה: 1
דובדבן: 2
תאריך: 3
סמבוק: 4
שרי מגיע אחרי אפל

יתרונות Enum

  • Enum ב- Java משתפר בטיחות סוג
  • Enum נועד להיות שמיש בקלות החלף מקרים
  • Enum יכול להיות חצה
  • לאנום יכול להיות שדות, שיטות, ו בונים
  • Enum יכול ליישם ממשקים
  • Enum לא יכול להאריך א מעמד כי באופן פנימי, זה מתרחב Enum מעמד

שימוש במיני אנוש: רוק, נייר, משחק מספריים

אנחנו נשתמש enum בג'אווה כדי ליצור את משחק הילדות שלנו, נייר הסלע והמספריים . הקוד הבא מסביר כיצד.

חבילה Edureka יבוא java.util.Random יבוא java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} class public SPS {public static void main (String [] args) {Random random = new Random () game booleanOver = false HandSign playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = new Scanner (System.in) System.out.println ('n בואו נתחיל ... n') בזמן (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') בוליאני validInput עשה {System.out.print ('n התור שלך (אנא הזן s למספריים, p לנייר, t לאבן, q כדי להפסיק): n ') char inChar = in.next (). toLowerCase (). charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} אחרת אם (inChar ==' s ' ) {playerMove = HandSign.SCISSOR} אחר אם (inChar == 'p') {playerMove = HandSign.PAPER} אחר אם (inChar == 't') {playerMove = HandSign.STONE} אחר {System.out.println ( 'n אנא בדוק את הקלט ונסה שוב! n') validInput = false}} בזמן (! val idInput) if (! gameOver) {int aRandomNumber = random.nextInt (3) if (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.println ('nIt's My Turn: SCISSORn')} אחר אם (aRandomNumber = = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's My Turn: PAPERn')} אחר {computerMove = HandSign.STONE System.out.println ('nIt's My Turn: STONEn')} אם (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} אחר אם (computerMove == HandSign.SCISSOR & amp & amp playerMove == HandSign.PAPER) {System.out.println ('nScissor חותך נייר , זכיתי! N ') ++ numComputerWon} אחר אם (computerMove == HandSign.PAPER & amp & amp playerMove == HandSign.STONE) {System.out.println (' nPaper wraps stone, I won! N ') ++ numComputerWon} אחרת אם (computerMove == HandSign.STONE & amp & amp amp amp amp PlayerMove == HandSign.SCISSOR) {System.out.println ('nStone שובר מספריים, זכיתי! n') ++ numComputerWon} אחר {System.out.println ('nCongratulations. ..! זכית! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% n מספר הניסויים: '+ numTrials) System.out.printf (' זכיתי ב-% d (%. 2f %%) . זכית ב-% d (%. 2f %%).% N ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon / numTrials) System.out.println (' ביי !, מקווה שנהנית ..! ' )}}

//תְפוּקָה:

הבה נתחיל...
מספריים-נייר-אבן
תורך (אנא הזן s למספריים, p לנייר, t לאבן, q כדי להפסיק):
ס
תורי: STONE
סטון שובר מספריים, זכיתי!
מספריים-נייר-אבן
תורך (אנא הזן s למספריים, p לנייר, t לאבן, q כדי להפסיק):
מה
מספר הניסויים: 1 זכיתי ב -1 (100.00%). זכית ב -0 (0.00%).
ביי !, מקווה שנהנית ..!

עם זאת, אנו מגיעים לסוף הדרכה זו של Java Enum. אני מקווה שהבנת את Enum ב- Java ואת יישומו באמצעות כמה דוגמאות בזמן אמת.

עכשיו שהבנת enum יסודות באמצעות 'מדריך Java Enum' בדוק את מאת אדוריקה, חברת למידה מקוונת מהימנה עם רשת של יותר מ -250,000 לומדים מרוצים הפרוסים ברחבי העולם. קורסי ההדרכה וההסמכה של Java J2EE ו- SOA של אדוריקה מיועדים לסטודנטים ואנשי מקצוע שרוצים להיות מפתחי Java. הקורס נועד לתת לך התחלה בתכנות ג'אווה ולהכשיר אותך למושגי הליבה והמתקדמים של ג'אווה יחד עם מסגרות Java שונות כמו Hibernate & אביב .

יש לך שאלה עבורנו? ציין זאת בסעיף ההערות בבלוג 'Java Enum Tutorial' ונחזור אליך בהקדם האפשרי.