השלכת int ל- Enum בג'אווה

1. סקירה כללית

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

2. שימוש Enum#ערכים

ראשית, בואו נסתכל כיצד נוכל לפתור בעיה זו באמצעות ה- Enumשל ערכים שיטה.

נתחיל ביצירת enum פיצהסטאטוס המגדיר את הסטטוס של הזמנה לפיצה:

פומבי סטודיו פומבי {הורה (5), מוכן (2), נמסר (0); זמן פרטי intToDelivery; PizzaStatus (int timeToDelivery) {this.timeToDelivery = timeToDelivery; } // שיטה שמקבלת את המשתנה timeToDelivery. }

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

ה סטָטִי ערכים שיטה מחזירה מערך המכיל את כל ערכי האנומום לפי סדר ההצהרה שלהם. לכן, אנו יכולים להשתמש ב- timeToDelivery ערך שלם כדי לקבל את ערך האנום המתאים:

int timeToDeliveryForOrderedPizzaStatus = 5; PizzaStatus pizzaOrderedStatus = null; עבור (PizzaStatus pizzaStatus: PizzaStatus.values ​​()) {if (pizzaStatus.getTimeToDelivery () == timeToDeliveryForOrderedPizzaStatus) {pizzaOrderedStatus = pizzaStatus; }} assertThat (pizzaOrderedStatus) .isEqualTo (PizzaStatus.ORDERED);

כאן אנו משתמשים במערך שהוחזר על ידי ה- PizzaStatus.values ​​() כדי למצוא ערך תואם המבוסס על ה- timeToDelivery תכונה.

גישה זו, לעומת זאת, די מילולית. יתר על כן, זה גם לא יעיל כמו בכל פעם שאנחנו רוצים להביא את המקביל פיצהסטאטוס, אנחנו צריכים לחזור על ה PizzaStatus.values ​​().

2.1. באמצעות Java 8 זרם

בואו נראה איך נוכל למצוא את ההתאמה פיצהסטאטוס באמצעות גישת Java 8:

int timeToDeliveryForOrderedPizzaStatus = 5; PizzaStatus אופציונלי = Arrays.stream (PizzaStatus.values ​​()) .filter (p -> p.getTimeToDelivery () == timeToDeliveryForOrderedPizzaStatus) .findFirst (); assertThat (pizzaStatus) .hasValue (PizzaStatus.ORDERED);

קוד זה נראה תמציתי יותר מזה שמשתמש ב ל לוּלָאָה. עם זאת, עדיין, אנו חוזרים על ה PizzaStatus.values ​​() בכל פעם שאנחנו צריכים להשיג אנומה תואמת.

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

3. שימוש מַפָּה

לאחר מכן, בואו נשתמש ב- Java מַפָּה מבנה נתונים יחד עם ערכים שיטה להביא את ערך האנומר המתאים לזמן למסירת ערך שלם.

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

אנו משתמשים במפה סטטית timeToDeliveryToEnumValuesMapping באופן פנימי, המטפל במיפוי הזמן למסירה לערך האנומי המתאים לו.

יתר על כן, ה ערכים שיטת ה- Enum class מספק את כל ערכי enum. בתוך ה סטָטִי לחסום, אנו חוזרים על מערך ערכי enum ומוסיפים אותם למפה יחד עם הזמן המתאים למסירת ערך שלם כמפתח:

מפה סטטית פרטית timeToDeliveryToEnumValuesMapping = HashMap חדש (); סטטי {עבור (PizzaStatus pizzaStatus: PizzaStatus.values ​​()) {timeToDeliveryToEnumValuesMapping.put (pizzaStatus.getTimeToDelivery (), pizzaStatus); }}

לבסוף, אנו יוצרים a סטָטִי שיטה שלוקחת את timeToDelivery מספר שלם כפרמטר. שיטה זו מחזירה את ערך האנום המתאים באמצעות המפה הסטטית timeToDeliveryToEnumValuesMapping:

פיצה סטטי פומבית סטטית castIntToEnum (int timeToDelivery) {return timeToDeliveryToEnumValuesMapping.get (timeToDelivery); }

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

4. מסקנה

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

כמו תמיד, כל דוגמאות הקוד הללו זמינות ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found