Почему не используются перечисления? - PullRequest
0 голосов
/ 14 апреля 2019

Я использовал довольно много библиотек / API Java и заметил, что static final используются везде, например, в Android.

Почему это так?Я знаю, что вы можете быстро | флаги вместе, что может быть полезно, но вы также можете использовать EnumSet.

Другая проблема, с которой я сталкиваюсь, особенно с android, заключается в том, что есть множество флагов с незаданной областью, чтоуборщик с перечислениями. Например,

Вы также не можете перепутать набор перечислений из одного класса с другим, как вы можете с помощью static final int s

1 Ответ

3 голосов
/ 14 апреля 2019

Я не нашел официального заявления проекта Android, но причина, скорее всего, такова: производительность , в частности, использование памяти.

Перечисления (потому что они являются классами Java) требуют больше памяти, чем целочисленные константы. Даже официальные документы Android (раньше) предостерегают от их использования:

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

Документация для разработчиков Android, " Управление памятью вашего приложения ", по состоянию на январь 2017 года

Интересно, что текущая версия этой страницы (по состоянию на апрель 2019 года) больше не упоминает Enums. Может быть, проблема сегодня менее актуальна.


Обратите внимание, что Android SDK предлагает альтернативу перечислениям, что также обеспечивает некоторую безопасность во время компиляции: аннотация @IntDef. Похоже, это то, что вы должны использовать вместо перечислений.

...