เมื่อทำงานกับตัวแปร / พารามิเตอร์ที่รับค่าได้เพียงจำนวน จำกัด ฉันพยายามใช้ Java เสมอenum
เช่นเดียวกับใน
public enum BonusType {
MONTHLY, YEARLY, ONE_OFF
}
ตราบเท่าที่ฉันอยู่ในรหัสของฉันมันก็ใช้ได้ดี อย่างไรก็ตามฉันมักจะต้องเชื่อมต่อกับโค้ดอื่น ๆ ที่ใช้ค่าธรรมดาint
(หรือString
) เพื่อจุดประสงค์เดียวกันหรือฉันต้องการอ่าน / เขียนจาก / ไปยังฐานข้อมูลที่เก็บข้อมูลเป็นตัวเลขหรือสตริง
ในกรณีนี้ฉันต้องการวิธีที่สะดวกในการเชื่อมโยงค่า enum แต่ละค่ากับจำนวนเต็มเพื่อให้ฉันสามารถแปลงทั้งสองวิธีได้ (หรืออีกนัยหนึ่งคือฉันต้องการ "enum ย้อนกลับได้")
การเปลี่ยนจาก enum เป็น int นั้นง่ายมาก:
public enum BonusType {
public final int id;
BonusType(int id) {
this.id = id;
}
MONTHLY(1), YEARLY(2), ONE_OFF(3);
}
จากนั้นฉันสามารถเข้าถึงค่า int เป็นBonusType x = MONTHLY; int id = x.id;
.
อย่างไรก็ตามฉันไม่เห็นวิธีที่ดีสำหรับการย้อนกลับนั่นคือการเปลี่ยนจาก int ไป enum ตามหลักการแล้วสิ่งที่ต้องการ
BonusType bt = BonusType.getById(2);
วิธีแก้ปัญหาเดียวที่ฉันสามารถทำได้คือ:
- ใส่วิธีการค้นหาลงใน enum ซึ่งใช้
BonusType.values()
เพื่อเติมแผนที่ "int -> enum" จากนั้นแคชและใช้เพื่อค้นหา จะได้ผล แต่ฉันต้องคัดลอกวิธีนี้เหมือนกันในแต่ละ enum ที่ฉันใช้ :-( - ใส่วิธีการค้นหาลงในคลาสยูทิลิตี้แบบคงที่ จากนั้นฉันต้องการเพียงวิธีการ "ค้นหา" เพียงวิธีเดียว แต่ฉันต้องใช้การไตร่ตรองเพื่อให้มันใช้งานได้ตามอำเภอใจ
ทั้งสองวิธีดูเหมือนจะอึดอัดมากสำหรับปัญหาง่ายๆ (?)
ความคิด / ข้อมูลเชิงลึกอื่น ๆ ?
ordinal()
.ordinal()
ตัดสินค่ารหัสประจำตัวของคุณได้หรือไม่ (หมายความว่าคุณใช้ไม่ได้) หรือถูกกำหนดโดยกองกำลังภายนอก?