在类中定义的枚举是一个静态嵌套类?

时间:2018-06-10 19:48:17

标签: java enums inner-classes

对于类中定义的枚举,例如

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

枚举是静态嵌套类(https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html)吗?从用于引用它的语法来判断似乎就是这种情况。或者它是一个非静态嵌套类(内部类)?

3 个答案:

答案 0 :(得分:7)

The JLS says

  

枚举声明指定一个新的枚举类型,一种特殊的类类型。

所以看起来来自Oracle的一句话就是枚举是类。

如果你在另一个类中声明一个枚举,那么是的,它是一个内部类。并且枚举总是静态的,所以,当在另一个类中声明它时,将枚举称为静态内部类(或嵌套类)是公平的。

答案 1 :(得分:4)

根据§8.9 of the JLS

  

枚举声明指定一个新的枚举类型,一种特殊的类类型。

     

[...]

     

嵌套枚举类型隐式.then。允许声明嵌套枚举类型以冗余指定static修饰符。 [...]

答案 2 :(得分:3)

enum声明生成的字节码如下:

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

是的,在这种情况下,enum静态嵌套类 - JLS.

中的确认