Zacząłem bardzo lubić używanie wyliczeń C # i Java w moim kodzie z kilku powodów:
- Są znacznie bardziej bezpieczne dla typów niż liczby całkowite, łańcuchy lub zestawy flag logicznych.
- Prowadzą do bardziej czytelnego kodu.
- Trudniej jest ustawić wyliczenie na nieprawidłową wartość niż wartość typu int lub string.
- Ułatwiają odkrywanie dozwolonych wartości zmiennej lub parametru.
- Wszystko, co przeczytałem, wskazuje, że działają one równie dobrze jak liczby całkowite w C # i większości maszyn JVM.
Jednak struktura systemu Android ma wiele przypadków, w których flagi różnych typów muszą być przekazywane, ale żaden z nich nie wydaje się używać wyliczeń. Kilka przykładów gdzie myślę, że ich stosowanie byłoby korzystne są Toast.LENGTH_SHORT
/ Toast.LENGTH_LONG
a View.GONE
, View.VISIBLE
itp
Dlaczego to? Czy wyliczenia działają gorzej niż proste wartości całkowite w Dalvik? Czy jest jakaś inna wada, której nie jestem świadomy?
Odpowiedzi:
Ta odpowiedź jest nieaktualna w marcu 2011 r.
Wyliczenia mogą być używane we Froyo i nowszych wersjach - zgodnie z tą odpowiedzią ( dlaczego „Unikaj wyliczeń tam, gdzie potrzebujesz tylko Ints” usunięto ze wskazówek dotyczących wydajności Androida? ) Od członka zespołu Android VM (i jego bloga ).
Poprzednia odpowiedź:
Oficjalnym zaleceniem zespołu ds. Androida jest unikanie wyliczeń, ilekroć możesz tego uniknąć:
Źródło: Unikaj wyliczeń tam, gdzie potrzebujesz tylko Ints
źródło
Liczby całkowite są mniejsze i wymagają mniejszych nakładów, co nadal ma znaczenie na urządzeniach mobilnych.
źródło
IntDef
iStringDef
, które pozwalają na zadeklarowanie jakiegoś typu typedef , więc użycie stałych int jest bardzo wygodne. blog.shamanland.com/2016/02/int-string-enum.htmlMój kolega wykonał mały test dotyczący tej sytuacji. Automatycznie wygenerował a
class
ienum
z taką samą ilością „wyliczeń”. Myślę, że wygenerował 30000 wpisów.Wyniki były następujące:
.class
zaclass
około 1200 KB.class
zaenum
około 800 KBMam nadzieję, że to komuś pomoże.
źródło