为什么Java中的常量是这样的?



我读过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返回3JFrame.HIDE_ON_CLOSE返回1,即后者三个等于前者。

为什么这样实现?

Java直到1.5才有枚举——这些常量中的大多数都是在更早的时候引入的,如果将它们改为枚举,Sun将会破坏大量现有的代码。

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

枚举是Java的新特性。将所有旧的整数常量更改为枚举会破坏许多现有的Java代码。

您提供的链接显示:

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)在更早的时候就有了

相关内容

  • 没有找到相关文章

最新更新