为什么Java中的常量与它们一样?

时间:2011-04-23 19:50:16

标签: java enums constants

我已阅读有关Java枚举的内容并定期使用它们。但是,我不明白为什么例如JFrame.EXIT_ON_CLOSE会返回int

考虑http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.html;

// 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值,或者将两个季节加在一起(这没有意义)。

JFrame.EXIT_ON_CLOSE返回 3 ,而JFrame.HIDE_ON_CLOSE返回 1 ,这意味着后者中的三个等于第一个。

为什么以这种方式实施?

4 个答案:

答案 0 :(得分:13)

Java没有枚举until 1.5 - 大多数这些常量都是在前面介绍过的,如果将它们更改为枚举,Sun就会破坏很多现有代码。

答案 1 :(得分:3)

在将枚举添加到语言之前,这些常量可能已添加到标准库中。枚举已添加到Java 1.5中。为了保持向后兼容性,他们将旧常量留下了原样。

答案 2 :(得分:3)

Enums是Java的最新成员。将所有旧的整数常量更改为枚举将破坏许多现有的Java代码。

答案 3 :(得分:1)

您提供的链接显示:

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;
etc...

Java Swing(JFrame)早就可用了。