java android enums android-support-library android-annotations

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 usar Enum en IntDef declaraciones de IntDef

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; }