Ich stimme mit den meisten Leuten überein, dass die Verwendung von Ordinalzahlen wahrscheinlich eine schlechte Idee ist. Normalerweise löse ich dieses Problem, indem ich der Enum einen privaten Konstruktor gebe, der zum Beispiel einen DB-Wert annehmen kann und dann eine statische fromDbValue
Funktion ähnlich der in Jans Antwort.
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;
}
}
Jetzt können Sie die Reihenfolge ändern, ohne die Suche zu ändern und umgekehrt.