@ Відповідь Лайла досить небезпечна, і я бачив, що вона не спрацьовує особливо, якщо зробити перерахунок статичним внутрішнім класом. Натомість я використав щось подібне, яке завантажить карти BootstrapSingleton перед перерахунками.
Відредагувати це більше не повинно бути проблемою із сучасними JVM (JVM 1.6 або новішою), але я думаю, що з JRebel все ще є проблеми, але я не мав шансу повторно перевірити це .
Завантажте мене спочатку:
public final class BootstrapSingleton {
// Reverse-lookup map for getting a day from an abbreviation
public static final Map<String, Day> lookup = new HashMap<String, Day>();
}
Тепер завантажте його в конструктор enum:
public enum Day {
MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"),
THURSDAY("R"), FRIDAY("F"), SATURDAY("Sa"), SUNDAY("Su"), ;
private final String abbreviation;
private Day(String abbreviation) {
this.abbreviation = abbreviation;
BootstrapSingleton.lookup.put(abbreviation, this);
}
public String getAbbreviation() {
return abbreviation;
}
public static Day get(String abbreviation) {
return lookup.get(abbreviation);
}
}
Якщо у вас є внутрішній перерахунок, ви можете просто визначити Map над визначенням enum, який (теоретично) повинен завантажуватися раніше.
stringMap
ініціалізації). Звичайним рішенням є використання вкладеного класу.