У меня недавно была та же проблема, и я использовал решение, предоставленное Гарри Джой.Это решение работает только с нулевым перечислением.Я также не стал бы рассматривать это как сохранение, поскольку он не работает с индексами, выходящими за пределы допустимого диапазона.
Решение, которое я использовал в итоге, может быть не таким простым, но полностью экономит и не снижает производительностьвашего кода даже с большими перечислениями:
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);
}