为什么要使用静态枚举?

时间:2013-07-01 15:30:24

标签: java enums

我试图找出声明枚举静态之间的区别吗?

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。那么差异是什么?何时使用上述任何一种?

4 个答案:

答案 0 :(得分:10)

根据JLS 8.9

  

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

     

这意味着无法定义本地(§14.3)枚举,或在内部类中定义枚举(§8.1.3)。

答案 1 :(得分:4)

Enums隐式public static final

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

答案 2 :(得分:2)

没有区别 - 在很多情况下,Java只允许冗余关键字,如果您愿意,可以让您明确。但总的来说,可以理解枚举是静态的,所以在我的脑海中没有理由这样说明

答案 3 :(得分:1)

Docs says

  

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

     

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