Вложенное определение перечисления 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 ответа:
нет, это не имеет значения. Однако причина не в том, что это объявление члена внутри интерфейса, как говорит Джон. Реальная причина в соответствии со спецификацией языка (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
.