У меня есть класс, который выглядит следующим образом:Статический блок не запуская
public final class MyUtils {
public static final List<String> MY_VALUES = new ArrayList<String>();
{
MY_VALUES.add("foo");
MY_VALUES.add("bar");
}
}
Я называю это из другого класса так же, как это:
MyUtils.MY_VALUES
Если я делаю так, список пустой, и если я отлаживаю, я вижу, что статический блок никогда не запускается.
Как я понимаю из ответов на вопросы When does static class initialization happen? и How to force a class to be initialised? блок должен работать, когда a static field of the class is assigned
, что я сейчас делаю. Я также попытался сделать переменную нефинал для выполнения условия «a non-constant static field is used
».
Я мог бы использовать метод init, также содержащийся в двух других вопросах и als в Why doesn't my static block of code execute?, но я все равно хотел бы понять, почему он не работает в первую очередь, хотя я, кажется, выполнил условия с языка Спецификация.
Это работает, спасибо. Будет несколько минут, пока я не смогу принять ваш ответ. Не могли бы вы объяснить, какова разница с конструкцией без ключевого слова 'static'? Я использовал это раньше, и он всегда работал до сих пор (например, если я вызываю статические методы, раньше этот блок выполнялся). –
См. Мой отредактированный ответ выше –
Awesome tip, thx – Jason