Я почти закончил расчетную деятельность, с которой работаю в Android для своего приложения. Я пытаюсь создать Gender Enum, но по какой-то причине получаю синтаксическую ошибку, вставляю EnumBody для завершения EnumDeclaration.
public static enum Gender
{
static
{
Female = new Gender("Female", 1);
Gender[] arrayOfGender = new Gender[2];
arrayOfGender[0] = Male;
arrayOfGender[1] = Female;
ENUM$VALUES = arrayOfGender;
}
}
Я также пробовал использовать его без статического {}, но получаю ту же синтаксическую ошибку.
Ответы:
Где, черт возьми, вы нашли этот синтаксис? Java Enums очень проста, вы просто указываете значения.
Если вы хотите, чтобы они были более сложными, вы можете добавить к ним следующие значения.
Затем, чтобы использовать перечисление, вы должны сделать что-то вроде этого:
источник
По этому поводу ведутся споры, но даже в самых последних документах Android предполагает, что использовать перечисления в приложении для Android - не самая лучшая идея. Причина в том, что они используют больше памяти, чем статическая постоянная переменная. Вот документ со страницы 2014 года, в котором не рекомендуется использовать перечисления в приложении для Android. http://developer.android.com/training/articles/memory.html#Overhead
Я цитирую:
Были некоторые места, где они говорят, что эти советы устарели и больше не имеют ценности, но причина, по которой они продолжают их повторять, должна быть в том, что в этом есть доля правды. Написание приложения для Android - это то, что вам следует сделать как можно более легким для удобства пользователей. И каждый маленький дюйм производительности на счету!
источник
Как прокомментировал Крис, перечисления требуют гораздо больше памяти на Android, которая складывается, поскольку они продолжают использоваться повсюду. Вместо этого вам следует попробовать IntDef или StringDef , которые используют аннотации, чтобы компилятор проверял переданные значения.
Его также можно использовать в качестве флагов, позволяющих выполнять бинарную композицию (операции ИЛИ / И).
РЕДАКТИРОВАТЬ : Кажется, что преобразование перечислений в целые числа является одной из оптимизаций по умолчанию в Proguard .
источник
источник
Согласно этому видео, если вы используете ProGuard, вам даже не нужно думать о проблемах с производительностью Enums !!
источник
Предпочтительный подход Android - это константы типа int, применяемые с помощью @IntDef:
Документы: https://developer.android.com/studio/write/annotations.html#enum-annotations
источник