Looking for java Keywords? Try Ask4Keywords

Java Language Перечисления со статическими полями


пример

Если у вашего класса enum есть статические поля, имейте в виду, что они создаются после самих значений перечисления. Это означает, что следующий код приведет к NullPointerException :

enum Example {
    ONE(1), TWO(2);

    static Map<String, Integer> integers = new HashMap<>();

    private Example(int value) {
        integers.put(this.name(), value);
    }
}

Возможный способ исправить это:

enum Example {
    ONE(1), TWO(2);

    static Map<String, Integer> integers;

    private Example(int value) {
        putValue(this.name(), value);
    }

    private static void putValue(String name, int value) {
        if (integers == null)
            integers = new HashMap<>();
        integers.put(name, value);
    }
}

Не инициализируйте статическое поле:

enum Example {
    ONE(1), TWO(2);

    // after initialisisation integers is null!!
    static Map<String, Integer> integers = null;

    private Example(int value) {
        putValue(this.name(), value);
    }

    private static void putValue(String name, int value) {
        if (integers == null)
            integers = new HashMap<>();
        integers.put(name, value);
    }
    // !!this may lead to null poiner exception!!
    public int getValue(){
        return (Example.integers.get(this.name()));
    }
}

initialisisation:

  • создавать значения перечисления
    • как побочный эффект putValue (), который инициализирует целые числа
  • статические значения установлены
    • integers = null; // выполняется после перечислений, поэтому содержимое целых чисел теряется