Android: enum vs static final ints?
¿Cuáles son las ventajas (o desventajas) de tener un enum
versus tener un conjunto de static final int
en aplicaciones Java Android? ¿Existen optimizaciones de rendimiento o rendimiento que favorezcan el uso de uno u otro?
Le pregunto esto en el contexto de decir intención requestCodes y tal – que tienden a ser ints en el código de ejemplo de Android, en contraposición a los valores de un enum, que estaba acostumbrado en C.
- Convertir cadena a JsonArray
- 'Open Declaration' en Eclipse navega a los archivos de clase en lugar de a los archivos de origen para las bibliotecas de Android
- Cómo administrar el número de subprocesos dentro de la tarea de sincronización
- Cómo utilizar ListFragment en Android Swipe Tabs?
- Carga de datos desde la aplicación de Android al programa de escritorio
- Cómo utilizar ScriptIntrinsic3DLUT con un archivo .cube?
- Importar nuevo módulo Android para el módulo JellyRefreshLayout
- Java.net.ConnectException: no se pudo conectar con /192.168.253.3 (puerto 2468): connect failed: ECONNREFUSED (Connection refused)
- Pasar ArrayList de objetos a través de la intención - Java (Android)
- Intención de youtube app profile / channel
- No se puede realizar la comprobación de instancia contra el tipo parametrizado ArrayList <Foo>
- ¿Puede utilizar declaraciones condicionales en el caso de conmutación en Android?
- Anotaciones de JPA en Android
Enum ventajas de esta pregunta :
- Son mucho más seguros que los números enteros, las cadenas o los conjuntos de banderas booleanas.
- Ellos conducen a un código más legible.
- Es más difícil establecer un enum para 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 números enteros en C # y la mayoría de las JVM.
Yo podria agregar:
- Los enums pueden tener variables de miembro e instancia, mientras que un
int
no puede.
Como la mayoría de las abstracciones, son generalmente inequívocamente ventajosas una vez que su funcionamiento alcanza para arriba . Especialmente en su código de aplicación (en contraposición al código de marco) yo elegiría enums sobre otros métodos que los simulan.
Una respuesta muy simple de las experiencias personales sería que los Enums proporcionan mucho mejor seguridad de tipo o en otras palabras, el compilador llega a jugar un papel más activo en mantener su código libre de errores.
Por otro lado, debido a que los Enums son "ciudadanos de segunda clase" del mundo de objetos, pueden ser difíciles de usar en algunos de los patrones de diseño más sutiles que se usan hoy en día, especialmente cuando los genéricos están involucrados.
Y, finalmente, puede utilizar static final ints en un campo de bits. No podrías hacer lo siguiente con un enum:
int selectedOptions = Options.OPTION1 | Options.OPTION2 | Options.OPTION3;
Bueno … según un tipo calvo los Enums son realmente malos para la memoria .
Debe utilizar anotaciones @ IntDef / @ StringDef :
public static final int NAVIGATION_MODE_STANDARD = 0; public static final int NAVIGATION_MODE_LIST = 1; public static final int NAVIGATION_MODE_TABS = 2; @IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS}) public @interface NavigationMode {}
y entonces
@NavigationMode public abstract int getNavigationMode(); public abstract void setNavigationMode(@NavigationMode int mode);
Una ventaja de los ints sobre los enums está en una FÁBRICA DE CLASE. El siguiente código C # no es extensible:
class Factory { public enum DrawableType {CIRCLE,SQUARE}; public static Drawable GetInstance(DrawableEnum e) { if (e == DrawableType.CIRCLE) { return new Circle(); } else if (e == DrawableType.SQUARE) { return new Square(); } else { throw new IndexOutOfRangeException(); // should never get here } }
Escribí este pobre código. Revisando patrones de diseño, la cuadrilla de cuatro usó un int. Intenté recuperarme aquí .
- Obtener información del dispositivo (como producto, modelo) desde el comando adb
- Use el pan tostado dentro del fragmento