Ответ 1
Конструкторы вызываются при инициализации класса enum
. Каждый конструктор будет вызываться в порядке объявления членства, независимо от того, какие элементы на самом деле ссылаются и используются.
Чтобы использовать надуманный пример в Java, вот код:
enum Commands{
Save("S");
File("F");
private String shortCut;
private Commands(String shortCut){ this.shortCut = shortCut; }
public String getShortCut(){ return shortCut; }
}
У меня есть следующий код теста/драйвера:
public static void main(String args[]){
System.out.println(Commands.Save.getShortCut());
}
Вопрос:
В Java, когда используется конструктор для нумерованной константы? В приведенном выше примере я использую только константу Save
. Означает ли это, что конструктор вызывается один раз для создания Save
только? Или оба Save
и File
будут построены вместе независимо?
Конструкторы вызываются при инициализации класса enum
. Каждый конструктор будет вызываться в порядке объявления членства, независимо от того, какие элементы на самом деле ссылаются и используются.
Как и метод static() {...}
, конструкторы вызываются при первом инициализации класса Enum. Все экземпляры Enum создаются до того, как их можно будет использовать.
public static void main(String args[]){
System.out.println(Commands.Save.getShortCut());
}
В этом примере ctor для Save
и File
будет завершен до вызова Save.getShortCut()
.
Они вызываются последовательно, как указано в коде.
Оба будут созданы во время инициализации класса, как говорили другие. Я хотел бы отметить, что это делается перед любыми статическими инициализаторами, поэтому вы можете использовать эти перечисления в статическом блоке.