Estou quase terminando uma atividade de cálculo com a qual estou trabalhando no Android para meu aplicativo. Tento criar um Enum de gênero, mas por algum motivo, obtendo um erro de sintaxe, insira "EnumBody" para concluir 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;
}
}
Eu também tentei sem o {} estático, mas recebo o mesmo erro de sintaxe.
Respostas:
Onde diabos você encontrou essa sintaxe? Java Enums são muito simples, você apenas especifica os valores.
Se você quiser que eles sejam mais complexos, você pode adicionar valores a eles assim.
Então, para usar o enum, você faria algo assim:
fonte
Tem havido algum debate em torno desse ponto de discórdia, mas mesmo nos documentos mais recentes, o android sugere que não é uma boa ideia usar enums em um aplicativo Android. A razão é porque eles usam mais memória do que uma variável constante estática. Aqui está um documento de uma página de 2014 que desaconselha o uso de enums em um aplicativo Android. http://developer.android.com/training/articles/memory.html#Overhead
Eu cito:
Tem havido alguns lugares onde eles dizem que essas dicas estão desatualizadas e não têm mais valor, mas a razão pela qual eles continuam repetindo isso deve ser que há alguma verdade nisso. Escrever um aplicativo Android é algo que você deve manter o mais leve possível para uma experiência de usuário tranquila. E cada centímetro de desempenho conta!
fonte
Conforme comentado por Chris, enums requerem muito mais memória no Android, o que aumenta à medida que são usados em todos os lugares. Você deve tentar IntDef ou StringDef , que usam anotações para que o compilador valide os valores passados.
Ele também pode ser usado como sinalizadores, permitindo a composição binária (operações OR / AND).
EDIT : Parece que transformar enums em ints é uma das otimizações padrão no Proguard .
fonte
fonte
De acordo com este vídeo, se você usar o ProGuard, você não precisa nem pensar nos problemas de desempenho do Enums !!
fonte
A abordagem preferida do Android são constantes int aplicadas com @IntDef:
Documentos: https://developer.android.com/studio/write/annotations.html#enum-annotations
fonte