मैं एक बहुत अजीब बग पर ठोकर खाई और मैं यह नहीं समझा सकता कि ऐसा क्यों होता है।जावा एनम स्थिरांक प्रारंभिक क्यों नहीं है?
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
सवाल, क्यों एक दूसरे के मान शून्य होगा निम्नलिखित enum कल्पना कीजिए?
संशोधन: आप enum के अंदर एक निजी स्थिर कक्षा में WHY_AM_I_NULL डाल, तो यह पहले आरंभ नहीं हो जाता।
Ammended नई अवलोकन –
इसके अलावा, अगर आप एक विधि के माध्यम से निरंतर सीधे उपयोग करने का प्रयास करते हैं, ग्रहण एक त्रुटि दिखाता है। स्थैतिक विधि का उपयोग करते समय ऐसा नहीं है। यहां तक कि FindBugs कोई समस्या नहीं दिखाता है! मुझे लगता है कि यह कम से कम –