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.

4 Solutions collect form web for “Android: enum vs static final ints?”

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í .

  • Xamarin y APK Firma - Cambiar ruta a JarSigner
  • Cómo generar un entero con los métodos de TextView?
  • Acciones en onActivityResult y "Error No se puede realizar esta acción después de onSaveInstanceState"
  • ¿Cómo puedo mostrar la imagen en la aplicación de Android
  • AndEngine - Kill Sprite después de X segundos?
  • Crear un gradiente radial programáticamente
  • Java: Debería usar constructor para hacer algo más que la inicialización de las variables
  • Deserialize / unmarshal lista genérica de XML a la lista en Android
  • Cálculo de la transformación de Fourier en Java
  • Cadena aleatoria de la lista de matrices
  • Enviar arrays con Intent.putExtra
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.