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

时间:2008-10-31 11:36:48

标签: java enums class-design

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

public interface Particle {

    enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

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

public interface Particle {

    static enum Charge {
        POSITIVE, NEGATIVE
    }

    Charge getCharge();

    double getMass();

    etc...
}

2 个答案:

答案 0 :(得分:85)

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

  

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

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

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

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

另一个嵌套私有枚举的示例(非隐式公开)。

public class A {
  private static enum E {A,B}
}

答案 1 :(得分:30)

不,没有区别。来自language spec, section 9.5

  

接口可能包含成员类型   声明(§8.5)。会员类型   接口中的声明是   隐含staticpublic