为啥使用常量而不是枚举?
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阅读更多内容。
【讨论】:
以上是关于为啥使用常量而不是枚举?的主要内容,如果未能解决你的问题,请参考以下文章