המרת מיתרים לאנומות בג'אווה

1. הקדמה

במאמר קצר זה, נראה כיצד להמיר מחרוזת ל- enum ב- Java במהירות.

2. התקנה

אנו עוסקים ב- Java הליבה ולכן איננו צריכים להוסיף חפצים נוספים. נעבוד עם PizzaDeliveryStatusEnum ממאמר מדריך האנומות.

3. הגיור

Enums דומים לשיעורי Java סטנדרטיים, וניתן לגשת לערכיהם באמצעות סימון הנקודה. אז כדי לגשת ל מוּכָן ערך של PizzaDeliveryStatusEnumהיינו עושים:

PizzaStatusEnum readyStatus = PizzaStatusEnum.READY;

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

מצד שני, ה enum סוג מספק א ערך של() שיטה שלוקחת א חוּט כוויכוח ומחזיר את המקביל enum לְהִתְנַגֵד:

PizzaStatusEnum readyStatus = PizzaStatusEnum.valueOf ("READY");

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

@ מבחן פומבי בטל כאשר ConvertedIntoEnum_thenGetsConvertedCorrectly () {String pizzaEnumValue = "READY"; PizzaStatusEnum pizzaStatusEnum = PizzaStatusEnum.valueOf (pizzaEnumValue); assertTrue (pizzaStatusEnum == PizzaStatusEnum.READY); }

חשוב לזכור כי ערך של() השיטה מתאימה לריכוז המסופק לה תלוי-רישיות, ולכן העברת ערך שאינו תואם למקרה של המקור enumהערכים יובילו ל- IllegalArgumentException:

@Test (צפוי = IllegalArgumentException.class) בטל בציבור כאשר ConveredIntoEnum_thenThrowsException () {String pizzaEnumValue = "rEAdY"; PizzaStatusEnum pizzaStatusEnum = PizzaStatusEnum.valueOf (pizzaEnumValue); } 

העברת ערך שאינו חלק מהמקור enumהערכים מובילים גם ל- IllegalArgumentException:

@Test (צפוי = IllegalArgumentException.class) בטל בציבור כאשר ConvertedIntoEnum_thenThrowsException () {String pizzaEnumValue = "לא חוקי"; PizzaStatusEnum pizzaStatusEnum = PizzaStatusEnum.valueOf (pizzaEnumValue); }

4. מסקנה

במאמר מהיר זה ראינו כיצד להמיר חוּט לתוך enum.

מומלץ מאוד להשתמש במובנה ערך של() שיטת ה- enum סוג, במקום לעשות את ההמרה בעצמנו.

כמו תמיד, ניתן למצוא את הקוד עבור מאמר זה ב- GitHub.


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