java - Enums y anotacion de android intDef
android-support-library android-annotations (3)
Bueno, no puedes hacerlo de esa manera. AppEnums.SERVICE_ERROR
nunca devolverá int
; devolverá 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 - nuevas Enums para el desarrollo de Android. Las enumeraciones a menudo requieren más del doble de memoria que las constantes estáticas. Debes evitar estrictamente el uso de enumeraciones en Android . por lo que
IntDef
diseñado para reemplazar Enums, no puede usarEnum
enIntDef
declaraciones deIntDef
Tengo una enumeración:
public enum AppEnums {
SERVICE_ERROR,
CONNECTION_ERROR;
}
y quiero usarlo en una intDef de Android Annotation:
@IntDef({AppEnums.CONNECTION_ERROR, AppEnums.SERVICE_ERROR})
public @interface ServiceErrors {
}
el error muestra:
Se encontraron tipos incompatibles, requeridos: ''largos''
¿Qué puedo hacer con esta incompatibilidad?
No quiero manejar los valores de los parámetros de AppEnum manualmente, Enum crear valores automáticamente de forma ordinaria. AppEnums.CONNECTION_ERROR.ordinal()
devuelve el valor int del parámetro enum pero no funciona aquí.
La idea principal de la anotación IntDef
es utilizar un conjunto de constantes int
como un enum
, pero sin enum
. En este caso tienes 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;
}
Puedes ver el ejemplo detallado here .
@Retention(RetentionPolicy.SOURCE)
@IntDef({NOT_STARTED, PENDING, COMPLETED})
public @interface DownloadState {
int NOT_STARTED = 1;
int PENDING = 2;
int COMPLETED = 3;
}