Я наткнулся на очень странную ошибку и не могу объяснить, почему это происходит. Представьте себе следующее перечисление:
import java.awt.Color;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(MyEnum.CONSTANT1.get());
System.out.println(MyEnum.CONSTANT2.get());
}
private enum MyEnum {
CONSTANT1(staticMethod1()),
CONSTANT2(staticMethod2());
private static final Color WHY_AM_I_NULL = new Color(255, 255, 255);
private final Color color;
private MyEnum(Color color) {
this.color = color;
}
public Color get() {
return color;
}
private static Color staticMethod1() {
return new Color(100, 100, 100);
}
private static Color staticMethod2() {
return WHY_AM_I_NULL;
}
}
}
Результаты при запуске:
java.awt.Color[r=100,g=100,b=100]
null
Вопрос в том, почему второй является нулевым?
Ammendment:
Если вы поместите WHY_AM_I_NULL в закрытый статический класс внутри перечисления, то он инициализируется первым.