2013-02-23 18 views
7

Nie jestem pewien, czy jest to definitywne oświadczenie, ale wydaje mi się, że Java API preferuje stałe ints ponad wyliczenia. Z części API, z której korzystałem, napotkałem wiele stałych final static int, w których można było użyć enum. Po takim przykładzie, że zdarza mi się patrzeć w tej chwili:Dlaczego biblioteki Java używają wartości stałych większych niż wyliczenia?

Od java.awt.BasicStroke:

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

W rzeczywistości, nie sądzę, bym kiedykolwiek widział enum używane w standardowej klasie Java API. Dlaczego to?

Projektuję interfejs API dla mojej własnej aplikacji (około miliard razy mniejszy niż interfejs API języka Java, ale nadal staram się być inteligentny) i próbuję zdecydować, czy użyć stałych wartości stałych lub wyliczeniowych. THIS zawiera odniesienia do bardzo popularnej książki, której jeszcze nie przeczytałem, co sugeruje, że wyliczenia mają wiele zalet. Większość innych wysoko ocenionych odpowiedzi w tym samym wątku zgadza się. Dlaczego więc Java nie używa własnych możliwości wyliczania?

+3

Jedna myśl tylko wpadła mi do głowy zaraz po wysłaniu. Może 'enum' nie był dostępny w Javie dawno temu, kiedy wszystkie te klasy były zaprojektowane? – The111

+7

'BasicStroke' pre-dates' enum', które dotarło do Java 1.5. – Reimeus

+1

To prawdopodobnie kod, który został napisany zanim język wyliczony. Ponieważ jest to publiczny interfejs API, nie można go zmienić – James

Odpowiedz

13

BasicStroke pre-daty enum, które dotarły do ​​Java 1.5. Kod został pozostawiony jako-jest dla kompatybilności wstecznej. Podczas pisania jakiegokolwiek nowego kodu, enums są zdecydowanie lepszym wyborem do wyboru w stosunku do zmiennych final static.

11

Nie ma nic wspólnego ze stałą int będącą lepszą stroną niż enum: po prostu enum został dodany tylko w JDK 5, więc większość API języka Java została napisana przed wyliczeniem enum: stała opcja była jedyną opcją, więc używany.

Jeśli interfejs API Java został ponownie napisany, zawierałby znacznie więcej wyliczeń i można się spodziewać, że pojawią się one w nowych dodatkach do interfejsu API w JDK6 lub nowszym.

Powinieneś używać wyliczeń dla swojej aplikacji, są one na ogół lepszym rozwiązaniem.

+0

Dzięki Jon, dostaniesz odpowiedź, jeśli Reimeus nie zamieściłby swojego komentarza w pierwszej kolejności. ;-) Dobre informacje również tutaj. – The111

+0

Czy on? Mój ekran mówi, że moje było 16 minut temu, jego było 14. Nie, że jestem zdenerwowany: p –

+0

Przed wysłaniem "odpowiedzi" opublikował "komentarz". ;-P Obiecałem mu "zaakceptować", jeśli opublikował to jako odpowiedź, tuż przed tym, jak zobaczyłem twoją odpowiedź. Musiałem przejść przez obietnicę ... ale zazwyczaj daję akceptację słabszej osobie z niższym ogólnym wynikiem. :-) – The111

Powiązane problemy