我偶然发现了一个非常奇怪的错误,我无法解释它为什么会发生。想象一下以下枚举:为什么Java枚举常量初始化不完整?
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在一个私人静态类枚举内,那么它首先被初始化。
Ammended新的观测 –
另外,如果您尝试直接使用常量,而不是通过方法,Eclipse显示错误。使用静态方法时情况并非如此。即使FindBugs不会显示问题!我认为这至少应该是一个警告 –