嵌套的 Java 枚举定义 - 声明为静态有影响吗? [复制]

Posted

技术标签:

【中文标题】嵌套的 Java 枚举定义 - 声明为静态有影响吗? [复制]【英文标题】:Nested Java enum definition - does declaring as static make a difference? [duplicate] 【发布时间】:2010-09-20 04:11:00 【问题描述】:

我有一个界面 - 这里有一个精心设计的版本作为示例:

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...

【问题讨论】:

【参考方案1】:

不,没有区别。然而,正如 Jon 所说,原因并不是因为它是接口内的成员声明。真正的原因是根据语言规范 (8.9)

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

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

public class A 
  enum E A,B;


public class A 
  static enum E A,B;

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

public class A 
  private static enum E A,B

【讨论】:

我认为两者兼而有之 - 由于两个不同的原因,它隐含静态,但其中任何一个本身就足够了。【参考方案2】:

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

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

【讨论】:

是(+1),实际上 checkstyle 会将“静态”标记为多余,并要求您将其删除。接口和注解中的变量自动是公共的、静态的和最终的,因此这些修饰符也是多余的。

以上是关于嵌套的 Java 枚举定义 - 声明为静态有影响吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

类成员的编译顺序之嵌套类型对类的影响

Java基础教程(14)--嵌套类

Java:静态与内部类[重复]

java枚举类型的用法

Java | 嵌套类(Nested Class)

java成神之——enum枚举操作