Нещодавно у мене була та сама проблема, і я використав рішення, надане Гаррі Джоєм. Це рішення працює лише з нульовою нумерацією. Я також не вважав би це збереженням, оскільки він не стосується індексів, які виходять за межі діапазону.
Рішення, яке я використав, може бути не таким простим, але повністю економить і не зашкодить продуктивності вашого коду навіть при великих переліках:
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);
}