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. 那么有什么区别呢?何时使用上述任何一种?

4

4 回答 4

10

根据JLS 8.9

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

这意味着不可能定义本地(第 14.3 节)枚举,或在内部类(第 8.1.3 节)中定义枚举。

于 2013-07-01T15:33:56.690 回答
4

Enums是隐含的public static final

所以在枚举中使用静态关键字没有区别。

于 2013-07-01T15:31:33.980 回答
2

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

于 2013-07-01T15:33:51.753 回答
1

文档说

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

嵌套的枚举类型是隐式的 static。可以将嵌套枚举类型显式声明为静态。

于 2013-07-01T15:34:12.580 回答