嵌套的Java枚举定义 - 声明为静态会产生影响吗?

ser*_*g10 54 java enums class-design

我有一个界面 - 这是一个很好的人为的版本作为一个例子:

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
Run Code Online (Sandbox Code Playgroud)

如果我将Charge枚举定义为静态,那么这种实现方式有什么不同- 即这有什么影响:

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}
Run Code Online (Sandbox Code Playgroud)

idr*_*sid 86

不,它没有任何区别.然而,原因不是因为它是界面内的成员声明,​​正如乔恩所说.真正的原因是根据语言规范(8.9)

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

在以下示例中,static也没有任何区别(即使我们没有接口):

public class A {
  enum E {A,B};
}

public class A {
  static enum E {A,B};
}
Run Code Online (Sandbox Code Playgroud)

嵌套私有枚举的另一个例子(不是隐式公开的).

public class A {
  private static enum E {A,B}
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为它是两者 - 由于两个不同的原因,它隐含地是静态的,但它们中的任何一个本身就足够了. (3认同)

Jon*_*eet 31

不,它没有任何区别.从语言规范,第9.5节:

接口可能包含成员类型声明(第8.5节).在接口的成员类型声明是隐式staticpublic.