Me encontré con un error muy extraño y no puedo explicar por qué sucede. Imagine la siguiente enumeración:¿Por qué la inicialización de las constantes enum de Java no está completa?
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;
}
}
}
Los resultados cuando se ejecuta este son:
java.awt.Color[r=100,g=100,b=100]
null
La pregunta es, ¿por qué el segundo es nulo?
enmienda: Si ponemos la WHY_AM_I_NULL en una clase estática privada dentro de la enumeración, a continuación, se inicializa en primer lugar.
Ammended nueva observación –
Además, si intenta usar la constante directamente, no a través de un método, Eclipse muestra un error. Ese no es el caso cuando se usa el método estático. ¡Incluso FindBugs no muestra un problema! Creo que esto merece una advertencia al menos –