为什么使用枚举而不是使用静态常量的类?

时间:2011-09-08 10:28:41

标签: java enumeration static-methods

  

可能重复:
  Enumerations: Why? When?

我在stackoverflow上搜索过这样的问题,但是使用枚举的主要好处没有答案。有一段时间我需要一些全球价值,我知道枚举是更好的做法,但我不能最终理解为什么?

2 个答案:

答案 0 :(得分: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值,或者添加两个季节 在一起(这没有任何意义)。
  • 无名称空间 - 您必须加前缀 带有字符串(在本例中为SEASON_)的int枚举的常量 避免与其他int枚举类型发生冲突。
  • 脆弱 - 因为int 枚举是编译时常量,它们被编译成客户端 使用它们。如果在两个现有常量之间添加新常量 或者订单被更改,客户端必须重新编译。如果他们不是, 它们仍将运行,但它们的行为将不确定。
  • 印刷 值是没有信息的 - 因为它们只是整数,如果你打印 所有你得到的是一个数字,它不会告诉你什么 它代表甚至是什么类型。

[end quote]

答案 1 :(得分:-1)

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