Недавно у меня была такая же проблема, и я использовал решение, предоставленное Гарри Джоем. Это решение работает только с перечислением с нуля. Я бы также не стал считать это спасением, поскольку он не работает с индексами, выходящими за пределы допустимого диапазона.
Решение, которое я использовал, может быть не таким простым, но оно полностью сохраняет и не повредит производительности вашего кода даже с большими перечислениями:
public enum Example {
UNKNOWN(0, "unknown"), ENUM1(1, "enum1"), ENUM2(2, "enum2"), ENUM3(3, "enum3");
private static HashMap<Integer, Example> enumById = new HashMap<>();
static {
Arrays.stream(values()).forEach(e -> enumById.put(e.getId(), e));
}
public static Example getById(int id) {
return enumById.getOrDefault(id, UNKNOWN);
}
private int id;
private String description;
private Example(int id, String description) {
this.id = id;
this.description= description;
}
public String getDescription() {
return description;
}
public int getId() {
return id;
}
}
Если вы уверены, что никогда не выйдете за пределы диапазона своего индекса, и не хотите использовать, UNKNOWN
как я сделал выше, вы, конечно, также можете сделать:
public static Example getById(int id) {
return enumById.get(id);
}