2013-02-23 3 views
7

Я не уверен, что это окончательное утверждение, но мне кажется, что Java API предпочитает постоянные ints над перечислениями. Из частей API, которые я использовал, я столкнулся с множеством констант final static int, где вместо этого можно было использовать enum. После такого примера, что я, случается, глядя на этот момент:Почему библиотеки Java используют константные int больше, чем перечисления?

От java.awt.BasicStroke:

public final static int CAP_BUTT = 0; 
public final static int CAP_ROUND = 1; 
public final static int CAP_SQUARE = 2; 

На самом деле, я не думаю, что я когда-либо видел перечисление используется в стандартном классе Java API. Почему это?

Я разрабатываю API для своего приложения (примерно в миллиард раз меньше, чем Java API, но я все еще пытаюсь быть умным) и пытается решить, следует ли использовать постоянные int или перечисления. THIS публикации ссылки очень популярная книга, которую я еще не прочитал, что означает, что перечисления имеют много преимуществ. Большинство других высокоуровневых ответов в той же теме согласны. Итак, почему Java, похоже, не использует собственные возможности перечисления?

+3

Одна догадка просто появилась в моем сознании сразу после публикации. Может быть, 'enum' был недоступен в Java давным-давно, когда все эти классы были разработаны? – The111

+7

'BasicStroke' pre-dates' enum', который прибыл в Java 1.5. – Reimeus

+1

Скорее всего, это код, который был написан до того, как язык перечислил. Поскольку это общедоступный API, он не может быть изменен. – James

ответ

13

BasicStroke pre-dates enum, который прибыл в Java 1.5. Код оставлен as-is для обратной совместимости. При написании любого нового кода enums, безусловно, лучший выбор дизайна по сравнению с final static переменными.

11

Это не связано с тем, что константа int лучше, чем переименование: это просто, что перечисление было добавлено только в JDK 5, поэтому большая часть java-API была написана до того, как было доступно перечисление: постоянный ints был единственным вариантом, используемый.

Если API-интерфейс java был переписан, он будет содержать гораздо больше перечислений, и вы можете ожидать, что они появятся в новых дополнениях к API в JDK6 или более поздней версии.

Возможно, вы должны использовать перечисления для своего приложения, они, как правило, лучший вариант.

+0

Спасибо, Джон, вы получили бы ответ, если бы Реймеус не отправил свой комментарий первым. ;-) Хорошая информация здесь тоже. – The111

+0

Он? Мой экран говорит, что мой был 16 минут назад, ему было 14. Не то, чтобы я расстроен: p –

+0

Он отправил «комментарий», прежде чем отправил «ответ». ; -P Я пообещал ему «принять», если он разместил это как ответ, как раз перед тем, как я увидел, что ваш ответ пришел. Должен был выполнить мое обещание ... но обычно я даю согласие проигравшему с более низким общим счетом. :-) – The111

Смежные вопросы