【问题标题】:What is Enum useful for? [duplicate]枚举有什么用? [复制]
【发布时间】:2012-07-08 18:04:52
【问题描述】:

在阅读了一些关于 enum 的问题和答案后,我发现它并没有真正有用...

它介于类和变量之间,但我知道在哪里可以使用它,因此它比一个类或几个变量更有用。

【问题讨论】:

标签: java enums


【解决方案1】:

还有其他你可以做的事情以及使用它们的原因,但我使用枚举的主要原因是防止出现无效参数的可能性。例如,想象以下方法:

public void doSomethingWithAMonth(int monthNum);

这不仅是模棱两可的(月份索引是从 1 开始,还是从 0 开始?),而且您可以给出完全无效的数据(13+,负数)。如果你有一个枚举 Month 与 JAN、FEB 等,签名变为:

public void doSomethignWithAMonth(Month month);

调用此方法的代码可读性更高,并且不会提供无效数据。

【讨论】:

  • 谢谢!现在我想我理解得更好了:)
  • 这是一个简单而好的例子
【解决方案2】:

我将枚举用于任何具有多个不变“类型”的事物。即一周中的几天。

在这种情况下我为什么不使用 String 是因为我不能在 String 上执行 switch 语句,而我可以在 Enum 上执行,所以一周中的每一天我都可以做一些特定的事情。

我在处理单例模式时也使用 Enum,检查 Effective Java book CH2(CHAPTER 2 CREATING AND DESTROYING OBJECTS),引用:

“虽然这种方法尚未广泛应用 采用,单元素枚举类型是实现单例的最佳方式。” 不会粘贴代码阅读这本书非常好。

如果我是你,我会首先阅读Thinking in java 枚举类型一章。然后在 Effective Java 第 6 章之后,你应该会很好

【讨论】:

    【解决方案3】:

    最简单的定义 - An enum is just like any other class, with a predefined set of instances.

    枚举最好的部分是它可以在我们不能使用字符串的 switch 语句中使用。

    并且 Enum 是一种安全类型,因此您不能在运行时分配新值。

    【讨论】:

    【解决方案4】:

    enum 强制编码人员从预定义的实体或概念列表中进行选择。虽然您可以通过类或将变量设置为特定的已知值来实现相同的目标,但枚举不易出错,因为它宣传并强制执行一个菜单,值的设置者可以从中选择。

    【讨论】:

      【解决方案5】:

      枚举有助于防止人们做他们不应该做的事情。例如,如果我有:

      public final static int WEATHER_SUNNY = 0;
      public final static int WEATHER_RAINY = 1;
      public final static int WEATHER_HAIL = 2;
      

      那么我可以这样做:MyClass.WEATHER_SUNNY + MyClass.WEATHER_HAIL 这没有任何意义。这就是为什么最好有一个 Weather 枚举。这使代码更具可读性,并且不允许将两个天气整数相加。

      【讨论】:

      • 我不是这个例子的忠实粉丝,因为我觉得它鼓励狭隘的思维。像这样的不同天气类型没有理由不能重叠,事实上,它们经常重叠。
      • @Thor84no:感谢您的评论。然而,这一切都取决于领域和应用程序,所以说“鼓励狭隘思维”之类的话。似乎不合适。
      【解决方案6】:

      我会在其他答案中添加枚举是只有固定数量实例的类。这些实例可能具有字段和方法,并且可以用作任何其他 Java 对象。例如,Month 枚举可以定义类似

      的方法
      public int getNumberOfDays(int year);
      public boolean isFirstOfYear();
      

      【讨论】:

        【解决方案7】:

        从名称“enum”开始,它非常适合用于提供扩展功能的枚举常量。例如,您可以存储一些由多个参数组成的常量,例如:constantId、constanNameString、附加参数。此外,枚举可以包含函数。

        枚举的一个奇特用途是创建一个单例。

        【讨论】:

          【解决方案8】:

          当您有一个功能重要且有限的值列表时,枚举很有用。

          例如,您需要使用一周中的某一天:不会添加另一天,您宁愿在代码中使用 Day.MONDAY 而不是数字,并且必须记住 0 是星期一,1是星期二等等。 它也使 switch 语句更容易理解,带有:

          Switch(day) { 
            case Monday : ... break;
            case Tuesday : ... break
            etc.
          }
          

          【讨论】:

            【解决方案9】:

            除其他外,枚举对于创建单例很有用:

            What is an efficient way to implement a singleton pattern in Java?

            【讨论】:

              猜你喜欢
              • 2014-04-28
              • 2012-04-08
              • 2016-10-02
              • 2015-12-10
              • 1970-01-01
              • 2011-07-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多