Casi he terminado con una actividad de cálculo con la que estoy trabajando en Android para mi aplicación. Intento crear una enumeración de género, pero por alguna razón obtengo un error de sintaxis, inserte "EnumBody" para completar 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;
}
}
También lo probé sin el {} estático pero obtengo el mismo error de sintaxis.
Respuestas:
¿Dónde diablos encontraste esta sintaxis? Las enumeraciones de Java son muy simples, solo especifique los valores.
Si desea que sean más complejos, puede agregarles valores como este.
Luego, para usar la enumeración, haría algo como esto:
fuente
Ha habido cierto debate en torno a este punto de discusión, pero incluso en los documentos más recientes, Android sugiere que no es una buena idea usar enumeraciones en una aplicación de Android. La razón es porque consumen más memoria que una variable de constantes estáticas. Aquí hay un documento de una página de 2014 que desaconseja el uso de enumeraciones en una aplicación de Android. http://developer.android.com/training/articles/memory.html#Overhead
Yo cito:
Ha habido algunos lugares donde dicen que estos consejos están desactualizados y ya no son valiosos, pero la razón por la que siguen repitiéndolos, debe ser que hay algo de verdad en ellos. Escribir una aplicación de Android es algo que debe mantener lo más ligero posible para una experiencia de usuario fluida. ¡Y cada centímetro de rendimiento cuenta!
fuente
Como comentó Chris, las enumeraciones requieren mucha más memoria en Android que se suma a medida que se siguen usando en todas partes. En su lugar, debería probar IntDef o StringDef , que utilizan anotaciones para que el compilador valide los valores pasados.
También se puede utilizar como banderas, lo que permite la composición binaria (operaciones OR / AND).
EDITAR : Parece que la transformación de enumeraciones en ints es una de las optimizaciones predeterminadas en Proguard .
fuente
fuente
De acuerdo con este video, si usa ProGuard, ¡ni siquiera necesita pensar en los problemas de rendimiento de Enums!
fuente
El enfoque preferido de Android son las constantes int aplicadas con @IntDef:
Documentos: https://developer.android.com/studio/write/annotations.html#enum-annotations
fuente