Мне очень нравится использовать перечисления C # и Java в моем коде по нескольким причинам:
- Они намного более безопасны в отношении типов, чем целые числа, строки или наборы логических флагов.
- Они приводят к более читаемому коду.
- Установить недопустимое значение для перечисления труднее, чем для int или строки.
- Они позволяют легко обнаружить допустимые значения переменной или параметра.
- Все, что я прочитал, указывает на то, что они работают так же хорошо, как целые числа в C # и большинстве JVM.
Однако в платформе Android есть множество случаев, когда необходимо передавать флаги различных типов, но ни один из них, похоже, не использует перечисления. Вот несколько примеров, когда я думаю, что их использование было бы полезным: Toast.LENGTH_SHORT
/ Toast.LENGTH_LONG
и View.GONE
, View.VISIBLE
и т. Д.
Почему это? Перечисления работают хуже, чем простые целочисленные значения в Dalvik? Есть ли еще какой-то недостаток, о котором я не знаю?
Ответы:
Этот ответ устарел по состоянию на март 2011 года.
Enums можно использовать на Froyo и выше - согласно этому ответу ( почему из советов по производительности Android было удалено «Avoid Enums Where You Only Need Ints»? ) От члена команды Android VM (и его блога ).
Предыдущий ответ:
Официальная рекомендация команды Android - избегать перечислений всякий раз, когда можно этого избежать:
Источник: Избегайте перечислений, где вам нужны только интенты
источник
Целые числа меньше и требуют меньше накладных расходов, что по-прежнему имеет значение на мобильных устройствах.
источник
IntDef
иStringDef
, которые позволяют объявить какой-то typedef , поэтому использование констант int очень удобно. blog.shamanland.com/2016/02/int-string-enum.htmlМой коллега провел небольшой тест относительно этой ситуации. Он автоматически сгенерировал a
class
и anenum
с одинаковым количеством «перечислений». Я считаю, что он создал 30000 записей.Результаты были:
.class
дляclass
примерно 1200 КБ.class
дляenum
примерно 800 КБНадеюсь, это кому-то поможет.
источник