Enums y la anotación android intDef
Tengo un enum:
public enum AppEnums { SERVICE_ERROR, CONNECTION_ERROR; }
Y quiero usarlo en un intDef de Android Annotation:
- Cómo extraer valores del paquete en Android
- Cómo convertir de un ArrayList de matrices a una matriz de matrices
- ¿Cómo hacer una ventana emergente de diálogo "no me preguntes otra vez"? Androide
- Mostrar certificado de Android
- ¿Cómo puedo convertir de binario a decimal en java (usando android studio)
@IntDef({AppEnums.CONNECTION_ERROR, AppEnums.SERVICE_ERROR}) public @interface ServiceErrors { }
Muestra el error:
Tipos incompatibles encontrados, requeridos: 'largo'
¿Qué puedo hacer con esta incompatibilidad?
No quiero manejar los valores de los parámetros de AppEnum manualmente, Enum crear valores automáticamente de ordinario. AppEnums.CONNECTION_ERROR.ordinal()
devuelve el valor int del parámetro enum pero no funciona aquí.
- ¿Por qué no se puede resolver android.os.build.VERSION con una variable?
- ¿Cómo puedo obtener el color medio de una imagen
- ¿Cómo inicia el Android Studio el Garbage Collector y cómo funciona?
- Referencia de valores de una matriz en java
- Cómo utilizar Iniciar sesión en Android
- Cambiar el nombre de SQLite Database
- Android Google Maps No se pudo encontrar el estilo 'mapViewStyle' en el tema actual
- Vista previa de Android Studio: Esta JVM no admite etiqueta constante 15
La idea principal de anotación IntDef
es usar un conjunto de constantes int
como un enum
, pero sin enum
. En este caso tiene que declarar todas las constantes manualmente.
@IntDef({Status.IDLE, Status.PROCESSING, Status.DONE, Status.CANCELLED}) @Retention(RetentionPolicy.SOURCE) @interface Status { int IDLE = 0; int PROCESSING = 1; int DONE = 2; int CANCELLED = 3; }
Aquí puede ver un ejemplo detallado.
Bueno, no puedes hacerlo de esa manera. AppEnums.SERVICE_ERROR
nunca devolverá int
; AppEnums.SERVICE_ERROR
. Ese es el punto de los tipos enumerados.
Lo que puedo sugerir es esto:
public static class AppEnums { public static final int CONNECTION_ERROR = 0; public static final int SERVICE_ERROR = 1; } @IntDef({AppEnums.CONNECTION_ERROR,AppEnums.SERVICE_ERROR}) public @interface ServiceErrors { }
Copiado del comentario de Yazazzello a continuación:
IntDef – nuevo Enums para el desarrollo de Android. Los enums requieren a menudo más del doble de memoria que las constantes estáticas. Debe evitar estrictamente el uso de enums en Android . Así
IntDef
donde diseñado para reemplazar Enums, no puede utilizarEnum
en declaracionesIntDef
- ¿Saber cuándo una vista en un ListView ha salido de la pantalla?
- Combine la imagen y el texto a dibujable