为什么使用枚举而不是带有静态常量的类?
可能的重复:
枚举:为什么?什么时候?
我在 stackoverflow 上搜索过此类问题,但没有关于使用枚举的主要好处的答案。有时我需要一些全局价值,我知道枚举是更好的做法,但我最终无法理解为什么?
Possible Duplicate:
Enumerations: Why? When?
I've search such questions on stackoverflow, but there is no answer with the main benefits of using enums. Some time i need some heap of global value, and i know that enumerations is better practice but I cannot finaly understand why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Java 语言指南 列出了使用整数常量的几种方法枚举类型不如使用枚举。我引用:
在之前的版本中,表示枚举类型的标准方法是 int 枚举模式:
这种模式有很多问题,例如:
需要季节的其他 int 值,或添加两个季节
在一起(这没有意义)。
带有字符串(在本例中为 SEASON_)的 int 枚举常量
避免与其他 int 枚举类型发生冲突。
枚举是编译时常量,它们被编译到客户端中
使用它们。如果在两个现有常量之间添加新常量
或者顺序改变,客户端必须重新编译。如果他们不是,
他们仍然会运行,但他们的行为将是不确定的。
值没有提供任何信息 - 因为它们只是整数,如果您打印
你得到的只是一个数字,它无法告诉你什么
它代表什么,甚至它是什么类型。
[引用结束]
The Java Language Guide lists several ways in which using integer constants for enumerated types is inferior to using enums. I quote:
In prior releases, the standard way to represent an enumerated type was the int Enum pattern:
This pattern has many problems, such as:
other int value where a season is required, or add two seasons
together (which makes no sense).
constants of an int enum with a string (in this case SEASON_) to
avoid collisions with other int enum types.
enums are compile-time constants, they are compiled into clients that
use them. If a new constant is added between two existing constants
or the order is changed, clients must be recompiled. If they are not,
they will still run, but their behavior will be undefined.
values are uninformative - Because they are just ints, if you print
one out all you get is a number, which tells you nothing about what
it represents, or even what type it is.
[end quote]
页面http://well-spun.co.uk/code_templates/enums.php 可以用 C++、Java 或 PHP 生成类型安全枚举的代码。它使用静态。
The page http://well-spun.co.uk/code_templates/enums.php can generate the code of typesafe enums in C++, Java or PHP. It uses static.