J'ai presque terminé avec une activité de calcul avec laquelle je travaille dans Android pour mon application. J'essaie de créer un Gender Enum, mais pour une raison quelconque , j'obtiens une erreur de syntaxe, insérez "EnumBody" pour terminer 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;
}
}
Je l'ai également essayé sans le static {} mais j'obtiens la même erreur de syntaxe.
Réponses:
Où diable avez-vous trouvé cette syntaxe? Les énumérations Java sont très simples, il vous suffit de spécifier les valeurs.
Si vous voulez qu'ils soient plus complexes, vous pouvez leur ajouter des valeurs comme ceci.
Ensuite, pour utiliser l'énumération, vous feriez quelque chose comme ceci:
la source
Il y a eu un débat autour de ce point de discorde, mais même dans les documents les plus récents, Android suggère que ce n'est pas une si bonne idée d'utiliser des énumérations dans une application Android. La raison en est qu'ils utilisent plus de mémoire qu'une variable de constantes statiques. Voici un document d'une page de 2014 qui déconseille l'utilisation d'énumérations dans une application Android. http://developer.android.com/training/articles/memory.html#Overhead
Je cite:
Il y a eu des endroits où ils disent que ces conseils sont dépassés et n'ont plus de valeur, mais la raison pour laquelle ils continuent de le répéter, c'est qu'il y a du vrai. L'écriture d'une application Android est quelque chose que vous devez garder aussi léger que possible pour une expérience utilisateur fluide. Et chaque petit centimètre de performance compte!
la source
Comme l'a commenté Chris, les énumérations nécessitent beaucoup plus de mémoire sur Android, car elles continuent d'être utilisées partout. Vous devriez plutôt essayer IntDef ou StringDef , qui utilisent des annotations afin que le compilateur valide les valeurs passées.
Il peut également être utilisé comme indicateur, permettant une composition binaire (opérations OR / AND).
EDIT : Il semble que la transformation des énumérations en entiers soit l' une des optimisations par défaut de Proguard .
la source
la source
Selon cette vidéo, si vous utilisez le ProGuard, vous n'avez même pas besoin de penser aux problèmes de performances d'Enums !!
la source
L'approche préférée d'Android est les constantes int appliquées avec @IntDef:
Documents: https://developer.android.com/studio/write/annotations.html#enum-annotations
la source