Почему константы в Java такие, какие они есть? - PullRequest
1 голос
/ 23 апреля 2011

Я читал о перечислениях 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 ]

13 голосов
/ 23 апреля 2011

У Java не было перечислений до 1,5 - большинство из этих констант были введены ранее, и если бы они были заменены на перечисления, Sun сломала бы большую часть существующего кода.

3 голосов
/ 23 апреля 2011

Перечисления являются недавним дополнением к Java. Изменение всех старых целочисленных констант на перечисления разрушило бы большую часть существующего Java-кода.

3 голосов
/ 23 апреля 2011

Эти константы, вероятно, были добавлены в стандартную библиотеку до добавления перечислений в язык.Перечисления были добавлены в Java 1.5 .Чтобы обеспечить обратную совместимость, они оставили старые константы такими, какими они были.

1 голос
/ 23 апреля 2011

Ссылка, которую вы указали, гласит:

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) была доступна намного раньше.

...