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

发布于 2024-12-04 02:41:33 字数 249 浏览 0 评论 0原文

可能的重复:
枚举:为什么?什么时候?

我在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

暗恋未遂 2024-12-11 02:41:33

Java 语言指南 列出了使用整数常量的几种方法枚举类型不如使用枚举。我引用:

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

// 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
    枚举是编译时常量,它们被编译到客户端中
    使用它们。如果在两个现有常量之间添加新常量
    或者顺序改变,客户端必须重新编译。如果他们不是,
    他们仍然会运行,但他们的行为将是不确定的。
  • 印刷
    值没有提供任何信息
    - 因为它们只是整数,如果您打印
    你得到的只是一个数字,它无法告诉你什么
    它代表什么,甚至它是什么类型。

[引用结束]

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:

// 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;

This pattern has many problems, such as:

  • Not typesafe - Since a season is just an int you can pass in any
    other int value where a season is required, or add two seasons
    together (which makes no sense).
  • No namespace - You must prefix
    constants of an int enum with a string (in this case SEASON_) to
    avoid collisions with other int enum types.
  • Brittleness - Because int
    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.
  • Printed
    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]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文