Почему инициализация констант перечисления 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

Вопрос в том, почему второе значение равно нулю?

Поправка: Если вы поместите WHY_AM_I_NULL в частный статический класс внутри перечисления, то он инициализируется первым.

9
задан m_pGladiator 25 August 2011 в 10:12
поделиться