为啥使用常量而不是枚举?

Posted

技术标签:

【中文标题】为啥使用常量而不是枚举?【英文标题】:Why use constants instead of enums?为什么使用常量而不是枚举? 【发布时间】:2011-10-22 04:11:26 【问题描述】:

我已经在很多 Java 库中看到使用了很多可以轻松使用枚举的常量。即使在 Swing 中,也有很多代码使用常量而不是枚举。为什么?

使用枚举有什么缺点?

【问题讨论】:

【参考方案1】:

因为枚举是在 Java 5 中引入的,而这些库是很久以前编写的。重构它们会破坏大量现有应用程序。

【讨论】:

即使在 Java 5 之后(不久),许多 API 设计人员也不愿意使用枚举,因为他们出于某种原因不想创建这么多不同的枚举。很高兴,那个时代已经一去不复返了,枚举现在被广泛使用。【参考方案2】: 有很多使用预枚举解决方案的文档。 有很多开发人员是第一次使用 Java,并且有使用另一种语言的经验,其中使用常量是常态。 很多库都希望支持 Java 1.4 及更早版本。 Java 1.3 和 1.4 至今仍在使用。 工作代码并未仅仅为了使用枚举而重写。

我发现我仍然告诉人们使用枚举作为单例,即使它已经存在 7 年了。 :P

什么时候会使用使用常量而不是枚举?当您有许多关联但不直接相关的常量时。

public static final int BUFFER_SIZE = 32 * 1024;
public static final String ERROR = "Error: ";
public static final char TAB = 't';

【讨论】:

我仍然在告诉人们不要将枚举用于单例。 也许你可以添加一个链接来说明你不应该这样做的原因(我不同意,但为了完整性) 你不应该告诉人们不要使用 Singleton 吗? @AlexFedulov 好点。我更喜欢无国籍的单身人士。你应该避免创建有状态的单例。【参考方案3】:

Java 中的枚举是在 Java 5 中引入的,以前没有,Enum 相当于 java 中的一个类。

【讨论】:

【参考方案4】:

在 Java 1.5 之前,Java 中没有 enum,实现枚举模式最直接的方法是使用 const int。你可以在Java Tutorial section for enums阅读更多内容。

【讨论】:

以上是关于为啥使用常量而不是枚举?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能使用常量而不是 this.item.number?

为啥 BCL 集合使用结构枚举器,而不是类?

为啥我不能使用数组的枚举器,而不是自己实现呢?

三歪问我为啥用枚举,枚举有哪些用法?

为啥在 C for 循环的条件中使用表达式而不是常量?

枚举和常量。哪个用的?