嵌套 Java 枚举定义 - 声明为静态会有什么不同吗?

2022-08-31 17:48:46

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

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};
}

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

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

答案 2

不,这没有什么区别。从语言规范的第 9.5 节

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