【问题标题】:Why using enumerations instead of class with static constant? [duplicate]为什么使用枚举而不是具有静态常量的类? [复制]
【发布时间】:2011-09-08 10:28:40
【问题描述】:

可能重复:
Enumerations: Why? When?

我在 stackoverflow 上搜索过此类问题,但没有关于使用枚举的主要好处的答案。有时我需要一些全局值,我知道枚举是更好的做法,但我最终无法理解为什么?

【问题讨论】:

标签: java enumeration static-methods


【解决方案1】:

Java 语言指南lists several ways in which using integer constants for enumerated types is inferior to using enums。我引用:

在以前的版本中,表示枚举类型的标准方法是 int Enum 模式:

// int Enum Pattern - has severe problems!
public static final int SEASON_WINTER = 0;
public static final int SEASON_SPRING = 1;
public static final int SEASON_SUMMER = 2;
public static final int SEASON_FALL   = 3;

这个模式有很多问题,比如:

  • 非类型安全 - 因为季节只是一个 int,所以你可以传入任何 需要季节的其他 int 值,或添加两个季节 在一起(这毫无意义)。
  • 无命名空间 - 您必须添加前缀 带有字符串的 int 枚举的常量(在本例中为 SEASON_) 避免与其他 int 枚举类型发生冲突。
  • 脆性 - 因为 int 枚举是编译时常量,它们被编译成客户端 使用它们。如果在两个现有常量之间添加一个新常量 或者顺序改变,客户端必须重新编译。如果他们不是, 它们仍会运行,但它们的行为将是不确定的。
  • 印刷 值是无信息的 - 因为它们只是整数,如果你打印 你得到的只是一个数字,它不会告诉你什么 它代表,甚至是什么类型。

[结束引用]

【讨论】:

    【解决方案2】:

    http://well-spun.co.uk/code_templates/enums.php 页面可以生成 C++、Java 或 PHP 中类型安全枚举的代码。它使用静态。

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 2011-07-30
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多