当前位置: 首页 > 面试题库 >

嵌套Java枚举定义-声明为static是否有所作为?

长孙弘盛
2023-03-14
问题内容

我有一个界面-这是一个很好的版本示例:

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

问题答案:

不,没关系。但是,原因并不是因为它是接口内的成员声明,​​如Jon所说。真正的原因是根据语言规范( 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}
}


 类似资料:
  • 本文向大家介绍Java 枚举类和自定义枚举类和enum声明及实现接口的操作,包括了Java 枚举类和自定义枚举类和enum声明及实现接口的操作的使用技巧和注意事项,需要的朋友参考一下 1.枚举类 注: JDK1.5之前需要自定义枚举类 JDK 1.5 新增的 enum 关键字用于定义枚举类 若枚举只有一个成员, 则可以作为一种单例模式的实现方式 1.枚举类的属性 1、枚举类对象的属性不应允许被改动

  • 问题内容: 我以为我很了解Java泛型,但是随后在java.lang.Enum中遇到了以下内容: 有人可以解释如何解释此类型参数吗?奖励点,用于提供可以使用类似类型参数的其他示例。 问题答案: 这意味着枚举的类型参数必须从本身具有相同类型参数的枚举派生。怎么会这样 通过使类型参数成为新类型本身。因此,如果我有一个名为StatusCode的枚举,则它等效于: 现在,如果你检查的限制,我们已经得到了-

  • 问题内容: 如果语言设计者仅使用Enum 会对语言产生怎样的影响? 现在唯一的区别是有人会写 A扩展 但由于Java中不允许扩展枚举,因此仍然是非法的。我也在考虑为jvm提供一个字节码,该字节码将smth定义为扩展枚举-但是泛型不会受到影响,因为它们都被删除了。 那么,声明的重点是什么? 谢谢! 编辑 为简单起见,让我们来看一个例子: 这个类结构有什么问题?限制可以做什么? 问题答案: 这是一个普

  • 问题内容: 在我经历1000 s 之后,可能不需要 是否有 任何情况下, 该下降从将使在差异 封装 (或 使用 例如,通过外)?还考虑思考 如果 不 建议将其删除或使其与编码风格保持一致? 我说 没有 和 下降 ,但不知道真的。 编辑: 刚意识到 我 的方式肯定是错误的-至少对于的 字段 -声明这些字段为私有字段,然后在外部类中使用它们- 因为这会在字节码中生成( “ synthetic” )访问

  • 问题内容: 我想将此示例C#代码转换为Java代码: 因为我想将此常量类更改为枚举 问题答案: 简而言之-您可以为枚举定义任意数量的参数,只要您提供构造函数参数(并将值设置为相应的字段) 正如Scott所指出的那样- 官方的枚举文档为您提供了答案。始终从语言功能和结构的官方文档开始。 更新:对于字符串,唯一的区别是您的构造函数参数为,并且您声明了带有

  • 问题内容: ES6是否为对象属性引入了定义明确的枚举顺序? 问题答案: 注意: 从ES2020开始,甚至更旧的操作(例如和)都必须遵循属性顺序。这不会改变以下事实:使用基本程序逻辑的属性顺序可能不是一个好主意,因为非整数索引属性的顺序取决于创建属性的时间。 ES2015-ES2019的答案: 对于,和: 第 对于一些其他操作: 是的 ,通常。 虽然ES6 / ES2015增加了财产秩序,它不需要,