Me ha empezado a gustar mucho el uso de enumeraciones de C # y Java en mi código por varias razones:
- Son mucho más seguros para los tipos que los números enteros, las cadenas o los conjuntos de indicadores booleanos.
- Conducen a un código más legible.
- Es más difícil establecer una enumeración en un valor no válido que un int o una cadena.
- Facilitan el descubrimiento de los valores permitidos para una variable o parámetro.
- Todo lo que he leído indica que funcionan tan bien como los números enteros en C # y la mayoría de las JVM.
Sin embargo, el marco de Android tiene numerosos casos en los que es necesario pasar indicadores de varios tipos, pero ninguno de ellos parece usar enumeraciones. Un par de ejemplos en los que yo creo que su uso sería beneficioso son Toast.LENGTH_SHORT
/ Toast.LENGTH_LONG
e View.GONE
, View.VISIBLE
, etc.
¿Por qué es esto? ¿Las enumeraciones funcionan peor que los valores enteros simples en Dalvik? ¿Hay algún otro inconveniente del que no tenga conocimiento?
Respuestas:
Esta respuesta está desactualizada en marzo de 2011.
Las enumeraciones se pueden usar en Froyo y versiones posteriores, de acuerdo con esta respuesta ( ¿Por qué se eliminó "Evitar enumeraciones donde solo necesita Ints" de los consejos de rendimiento de Android? ) De un miembro del equipo de VM de Android (y su blog ).
Respuesta anterior:
La recomendación oficial del equipo de Android es evitar las enumeraciones siempre que pueda evitarlo:
Fuente: Evite las enumeraciones donde solo necesita Ints
fuente
Los números enteros son más pequeños y requieren menos gastos generales, algo que aún importa en los dispositivos móviles.
fuente
IntDef
yStringDef
, que permiten declarar algún tipo de typedef , por lo que el uso de constantes int es muy conveniente. blog.shamanland.com/2016/02/int-string-enum.htmlUn colega mío realizó una pequeña prueba sobre esta situación. Él generó automáticamente una
class
y unaenum
con la misma cantidad de "enumeraciones". Creo que generó 30000 entradas.Los resultados fueron:
.class
para elclass
era aproximadamente 1200KB.class
para elenum
era aproximadamente 800KBEspero que esto ayude a alguien.
fuente