我读过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,即后者三个等于前者。
为什么这样实现?
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)在更早的时候就有了