Вложенное определение перечисления Java - имеет ли значение объявление как статическое? [дубликат]


этот вопрос уже есть ответ здесь:

  • В Java типы перечислений внутри класса статичны? 2 ответы

у меня есть интерфейс-вот красиво придуманная версия в качестве примера:

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

есть ли разница в том, как реализации этого будут вести себя, если я определил Charge перечисление как статические, т. е. не это имеет какой-либо эффект:

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
2   51  

2 ответа:

нет, это не имеет значения. Однако причина не в том, что это объявление члена внутри интерфейса, как говорит Джон. Реальная причина в соответствии со спецификацией языка (8.9), что

вложенные типы перечислений неявно статический. Это допустимо для явное объявление вложенного типа перечисления чтобы быть статичным.

в следующем примере статика также не имеет никакого значения (хотя у нас нет интерфейс):

public class A {
  enum E {A,B};
}

public class A {
  static enum E {A,B};
}

еще один пример с вложенным частная перечисление (неявно публичное).

public class A {
  private static enum E {A,B}
}

нет, это не имеет значения. Из спецификация языка, раздел 9.5:

интерфейсы могут содержать тип элемента объявления (§8.5). Тип члена объявление в интерфейсе неявно static и public.