Эннументы и андроидная аннотация intDef

У меня есть перечисление:

public enum AppEnums { SERVICE_ERROR, CONNECTION_ERROR; } 

И я хочу использовать его в intDef аннотаций Android:

 @IntDef({AppEnums.CONNECTION_ERROR, AppEnums.SERVICE_ERROR}) public @interface ServiceErrors { } 

Ошибка показывает:

Несовместимые типы, требуемые: 'long'

Что я могу сделать с этой несовместимостью?

Я не хочу вручную обрабатывать значения параметров AppEnum, Enum автоматически создает значения. AppEnums.CONNECTION_ERROR.ordinal() возвращает значение int параметра enum, но не работает здесь.

Solutions Collecting From Web of "Эннументы и андроидная аннотация intDef"

Основная идея аннотации IntDef заключается в использовании набора int констант, таких как enum , но без enum . В этом случае вам нужно объявить все константы вручную.

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

Здесь вы можете увидеть подробный пример.

Ну, ты не можешь так поступать. AppEnums.SERVICE_ERROR никогда не вернет int ; Он вернет AppEnums.SERVICE_ERROR . Это точка перечисляемых типов.

Я могу предложить следующее:

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

Скопировано из комментария Yazazzello ниже:

IntDef – новая версия Enums для Android. Для перечислений часто требуется более чем вдвое больше памяти, чем статические константы. Вы должны строго избегать использования перечислений на Android . Поэтому IntDef где предназначен для замены Enums, вы не можете использовать Enum в объявлениях IntDef