Вы можете использовать Enum#values()
, чтобы получить все значения перечисления в массиве.Порядковый номер отображает 1: 1 в индекс массива.Добавьте следующий метод для вашего Classification
enum:
public static Classification of(int ordinal) {
if (0 <= ordinal && ordinal < values().length) {
return values()[ordinal];
}
throw new IllegalArgumentException("Invalid ordinal " + ordinal);
}
и используйте его следующим образом
Classification classification = Classification.of(rs.getInt("classification"));
// ...
Однако использование порядкового номера enum для этого не является наилучшей практикой.Что, если какой-то разработчик реорганизует значения перечисления или добавляет / удаляет значения?Даже javadoc предупреждает, что он, как правило, бесполезен для разработчиков.Вместо этого присвойте каждому значению перечисления фиксированный идентификатор.Вы можете передать его как дополнительный аргумент аргумента конструктора enum.Вы даже можете использовать для этого представление String
в enum.
UNKNOWN(1, "Unknown"),
DELETION(2, "Deletion"),
DUPLICATION(3, "Duplication"),
// ...
Затем вместо этого использовать это значение для DB и изменить метод of()
для обхода их в цикле foreach:
public static Classification of(int id) {
for (Classification classification : values()) {
if (classification.id == id) {
return classification;
}
}
throw new IllegalArgumentException("Invalid id " + id);
}