为什么要使用常量而不是枚举?

7

我看到很多Java库中使用了大量常量,这些地方本应该使用枚举。甚至在Swing中,也有很多代码使用常量而不是枚举。为什么会这样呢?

使用枚举有哪些缺点?

4个回答

12
因为枚举类型是在Java 5中引入的,而那些库早在此之前就已经编写好了。重构它们将会破坏无数现有的应用程序。

即使在Java 5之后的短暂时间内,许多API设计人员仍然不愿使用枚举,因为他们不想为某些原因创建太多不同的枚举。高兴的是,那个时代已经过去了,现在枚举被广泛使用。 - Joachim Sauer

8
  • 有很多使用预枚举解决方案的文档。
  • 有很多开发者第一次使用 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';

我仍在告诉人们不要使用枚举来实现单例。 - irreputable
1
也许你可以添加一个链接,解释为什么不应该这样做(虽然我不同意,但为了完整性)。 - Peter Lawrey
你难道不应该告诉人们不要使用单例模式吗? - Alex Fedulov
2
@AlexFedulov 很好的观点。我更喜欢无状态单例。你应该避免创建有状态的单例。 - Peter Lawrey

1
Java中的枚举是在Java 5中引入的,之前并不存在。枚举相当于Java中的一个类。

0
在Java 1.5之前,Java中没有enum,实现枚举模式最直观的方法是使用const ints。您可以阅读Java教程枚举部分以了解更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接