嵌套的 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)。会员类型 接口中的声明是 隐含
static
和public
。
【讨论】:
是(+1),实际上 checkstyle 会将“静态”标记为多余,并要求您将其删除。接口和注解中的变量自动是公共的、静态的和最终的,因此这些修饰符也是多余的。以上是关于嵌套的 Java 枚举定义 - 声明为静态有影响吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章