我偶然发现了一个非常奇怪的错误,我无法解释为什么会这样.想像下面的枚举:
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放在枚举中的私有静态类中,那么它将被初始化.