Статическая инициализация перед Enum ElementsJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Статическая инициализация перед Enum Elements

Сообщение Anonymous »

Невозможно сделать статическую инициализацию перед инициализацией элементов перечисления в Java, поскольку элементы перечисления всегда должны быть объявлены и инициализированы первым. В противном случае, если инициализация зависит от элементов enum, это вызвало бы проблемы. Тем не менее, java enums предоставляет метод значений (), который способен соответствовать этой зависимости. Но вызов значений () может быть накладным расходом, потому что метод значений () копирует внутреннюю статическую массив каждый раз. < /P>

Например (отредактировано в посте, почему не может enum к статическим полям доступа к конструктору?): < /P>

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();

static
{
for(Day day:values())
ABBREV_MAP.put(day.abbreviation, day);
}
private Day(String abbreviation) {
this.abbreviation = abbreviation;
//ABBREV_MAP.put(abbreviation, this); this is not valid
}

public String getAbbreviation() {
return abbreviation;
}

public static Day getByAbbreviation(String abbreviation) {
return ABBREV_MAP.get(abbreviation);
}
}
< /code>

Как видно в примере, мне не понадобился бы блок кода статической инициализации, поэтому вызов значений (), который создает копию, если я смог инициализировать Hashmap перед Enum Elements. Код, прокомментированный в конструкторе, было бы достаточным. Если нет, разве это только ради устойчивости кода? Я предполагаю, что объявление элементов enum сначала не имеет ничего общего с безопасной инициализацией, как упоминалось в некоторых ответах.>

Подробнее здесь: https://stackoverflow.com/questions/439 ... m-elements
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»