ฉันเห็นด้วยกับคนส่วนใหญ่ว่าการใช้ลำดับอาจเป็นความคิดที่ไม่ดี ฉันมักจะแก้ปัญหานี้โดยให้ตัวสร้าง enum ส่วนตัวที่สามารถใช้ตัวอย่างเช่นค่า DB แล้วสร้างfromDbValue
ฟังก์ชั่นคงที่คล้ายกับหนึ่งในคำตอบของ ม.ค.
public enum ReportTypeEnum {
R1(1),
R2(2),
R3(3),
R4(4),
R5(5),
R6(6),
R7(7),
R8(8);
private static Logger log = LoggerFactory.getLogger(ReportEnumType.class);
private static Map<Integer, ReportTypeEnum> lookup;
private Integer dbValue;
private ReportTypeEnum(Integer dbValue) {
this.dbValue = dbValue;
}
static {
try {
ReportTypeEnum[] vals = ReportTypeEnum.values();
lookup = new HashMap<Integer, ReportTypeEnum>(vals.length);
for (ReportTypeEnum rpt: vals)
lookup.put(rpt.getDbValue(), rpt);
}
catch (Exception e) {
// Careful, if any exception is thrown out of a static block, the class
// won't be initialized
log.error("Unexpected exception initializing " + ReportTypeEnum.class, e);
}
}
public static ReportTypeEnum fromDbValue(Integer dbValue) {
return lookup.get(dbValue);
}
public Integer getDbValue() {
return this.dbValue;
}
}
ตอนนี้คุณสามารถเปลี่ยนลำดับโดยไม่ต้องเปลี่ยนการค้นหาและในทางกลับกัน