Перечисления, определенные в классе, являются статическим вложенным классом? - PullRequest
0 голосов
/ 10 июня 2018

Для перечисления, определенного в классе, например

class OuterClass {
    public enum Method {
        GET,
        PUT,
        POST,
        DELETE;
    }
}

Является ли перечисление статическим вложенным классом (https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)? Кажется, что это случай, исходя из синтаксиса, использованного для ссылки на негоИли это нестатический вложенный класс (внутренний класс)?

Ответы [ 3 ]

0 голосов
/ 10 июня 2018

Согласно §8.9 JLS :

Объявление enum определяет новый тип enum, особый тип типа класса.

[...]

Тип вложенного перечисления неявно static.Для объявления вложенного типа перечисления разрешено избыточно указывать модификатор static.[...]

0 голосов
/ 10 июня 2018

JLS говорит

Объявление enum определяет новый тип enum, особый тип типа класса.

Так выглядитСлово от Oracle состоит в том, что перечисления являются классами.

Если вы объявляете enum внутри другого класса, тогда да, это внутренний класс.И перечисления всегда статические, поэтому да , было бы справедливо назвать перечисление статическим внутренним классом (или вложенным классом), когда оно объявлено в другом классе.

0 голосов
/ 10 июня 2018

Сгенерированный байт-код для объявления enum выглядит следующим образом:

// compiled from: OuterClass.java
public final static enum INNERCLASS ...

Так что да, enum - это статический вложенный класс , в данном случае - подтверждение в JLS.

...