Подтвердить что ты не робот

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

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

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

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

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
4b9b3361

Ответ 1

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

Ответ 2

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

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