Почему конструктор перечисления не может получить доступ к статическим полям и методам? Это совершенно справедливо для класса, но недопустимо для перечисления.
Я пытаюсь сохранить экземпляры перечисления в статической карте. Рассмотрим этот пример кода, который позволяет выполнять поиск по сокращениям:
public enum Day {
Sunday("Sun"), Monday("Mon"), Tuesday("Tue"), Wednesday("Wed"), Thursday("Thu"), Friday("Fri"), Saturday("Sat");
private final String abbreviation;
private static final Map ABBREV_MAP = new HashMap();
private Day(String abbreviation) {
this.abbreviation = abbreviation;
ABBREV_MAP.put(abbreviation, this); // Not valid
}
public String getAbbreviation() {
return abbreviation;
}
public static Day getByAbbreviation(String abbreviation) {
return ABBREV_MAP.get(abbreviation);
}
}
Это не будет работать, поскольку перечисление не допускает статических ссылок в своем конструкторе. Однако он работает, только если он реализован как класс:
public static final Day SUNDAY = new Day("Sunday", "Sun");
private Day(String name, String abbreviation) {
this.name = name;
this.abbreviation = abbreviation;
ABBREV_MAP.put(abbreviation, this); // Valid
}
Подробнее здесь: https://stackoverflow.com/questions/443 ... tic-fields
Почему конструктор перечисления не может получить доступ к статическим полям? ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Аннотация Java не может получить доступ к защищенным статическим полям из верхнего класса
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Задача cron Silverstripe не может получить доступ к новым полям базы данных
Anonymous » » в форуме Php - 0 Ответы
- 23 Просмотры
-
Последнее сообщение Anonymous
-