55

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

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

2 回答 2

88

不,没有区别。然而,正如 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}
}
于 2008-10-31T12:08:17.697 回答
31

不,没有区别。从语言规范,第 9.5 节

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

于 2008-10-31T11:45:26.400 回答