【问题标题】:What's the use of creating an enum without instance?创建没有实例的枚举有什么用?
【发布时间】:2013-07-22 16:58:45
【问题描述】:

我正在通过枚举阅读和实施方案。我发现我们可以创建一个枚举 没有任何实例。这样的Enum有什么实际用途?其次Enum也可以实现 一个接口,但显然不能扩展一个类,因为它已经扩展了类Enum。在没有实例的情况下创建Enum 有哪些实际优势? 本

【问题讨论】:

  • 哦,这样。但是很多面试官都会问这个问题。如果没有,为什么 Java 人会允许它?某处可能有一些用处,我们不知道。

标签: java


【解决方案1】:

零成员枚举实际上是 Java 社区的某个部分使用的 实用程序类 习惯用法(最值得注意的是,Peter Lawrey)。它们是保证类不会被实例化或子类化的最简洁的方式,可以说是最干净的方式。

自然,在这样的枚举中你不会有任何 instance 方法;只有静态的。

【讨论】:

  • 你能举个例子说明这样的事情是在哪里完成的吗?我能想到很多使用常规类的地方(例如java.lang.Math),但我认为我从未见过这种情况。
  • 但它随后会出现在 javadoc 的 enum 部分中,这不一定是您要查找的位置。最终(为清楚起见)类 + 私有构造函数是 IMO 此类用例的标准习语(尽管它在功能上是等效的)。这就是通常在 JDK(包括 8 个)中所做的。
  • @arshajii Math 太老了,不能成为enum
  • @damo 我承认我可能有偏见。我很久以前就读过Peter Lawrey's blog 关于这个主题的内容,所以这个成语已经在我身上成长了。
  • @benz 因为它更简洁,而不仅仅是字符数:只要看到一个词enum,您就可以立即放心,该类满足实用程序类的所有要求:没有子类化,没有实例化。这是关于程序员的精神负担。当每一段项目代码都被赋予如此优雅时,整体效果就变得微妙了。
【解决方案2】:

Enum 是引用类型,例如 classinterfaces。这意味着您可以 好好适应原理,“program to interface and not implementation"

【讨论】:

    【解决方案3】:

    enum 的成员不一定固定到宇宙的尽头。您可以在不破坏二进制可比性的情况下添加新成员。所以我可以想象创建一个enum 来模拟一些目前没有实例但以后可能会添加的概念。

    是否也有可能为我们知道绝对不会有任何实例的概念创建enum?例如enum NegativeNaturalNumber{}?它可以在程序中起到任何作用吗?谁知道呢,我们不能肯定地说。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 2016-10-01
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多