2013-07-01 72 views
4

我试图找到声明一个枚举静态之间的区别?为什么使用静态枚举?

public class Example { 
    public static enum Days { 
    MONDAY(1); 

    private int day; 
    private Days(int day) { 
     this.day = day; 
    } 

    public int getDayNum() { 
     return day; 
    } 
    } 
} 

及以下

public class Example { 
    public enum Days { 
    MONDAY(1); 

    private int day; 
    private Days(int day) { 
     this.day = day; 
    } 

    public int getDayNum() { 
     return day; 
    } 
    } 
} 

一个我可以同时访问的方式不尽相同

Example.Days.MONDAY.getDayNum(); 

这是因为枚举是static, final以上。那么有什么区别?何时使用上述任何一项?

回答

10

由于每JLS 8.9

嵌套枚举类型隐含静态的。允许显式声明一个嵌套的枚举类型为静态的。

这意味着不可能定义一个本地(§14.3)枚举,或者定义一个内部类的枚举(§8.1.3)。

4

Enums含蓄public static final

因此,在枚举中使用static-keyword时没有区别。

+3

我不认为嵌套枚举必须是“公共”。他们是“静态”和近乎“最终”的。也就是说,'enum常量'可以覆盖'enum'中的方法。 –

+0

是的,我试过'enum Days'并试图从另一个包中访问它,它不起作用。我改成了'公共',这很好。 – noMAD

2

没有什么区别 - Java只允许在很多情况下使用冗余关键字,如果您愿意,可以让您明确指出。在一般情况下,但是,它的了解,枚举是静态的,所以我们没有理由在我的脑海宣布它的方式

1

Docs says

枚举类型是隐含最终除非它包含具有类体的至少一个枚举常量。

嵌套枚举类型为隐式静态。允许显式声明一个嵌套的枚举类型为静态的。