I have a utility class that looks like this:
public final class MyUtils {
public static final List<String> MY_VALUES = new ArrayList<String>();
{
MY_VALUES.add("foo");
MY_VALUES.add("bar");
}
}
I call this from another class just like this:
MyUtils.MY_VALUES
If I do so, the list is empty and if I debug I see the static block is never run.
As I understand from the answers to When does static class initialization happen? and How to force a class to be initialised? the block should run when a static field of the class is assigned
, which I do right away. I also tried making the variable non-final to fulfill the condition "a non-constant static field is used
".
I could use an init method as also sugested in the two other questions and als in Why doesn't my static block of code execute? but I would still like to understand why it isn't working in the first place although I seem to have fulfilled the conditions from the language specification.