枚举和 android 注释 intDef

我有一个枚举:

public enum AppEnums {
    SERVICE_ERROR,
    CONNECTION_ERROR;
}

我想在Android Annotation的intDef中使用它:

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

错误显示:

找到不兼容的类型,必需:“长”

对于这种不兼容性,我该怎么办?

我不想手动处理 AppEnum 参数的值,Enum 通常会自动创建值。 返回枚举参数的 int 值,但在此处不起作用。AppEnums.CONNECTION_ERROR.ordinal()


答案 1

注释的主要思想是使用一组常量,如 ,但没有 。在这种情况下,您必须手动声明所有常量。IntDefintenumenum

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

您可以在此处查看详细示例。


答案 2

好吧,你不能完全这样做。 永远不会回来;它会返回。这就是枚举类型的要点。AppEnums.SERVICE_ERRORintAppEnums.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 - 用于 Android 开发的新枚举。枚举通常需要比静态常量多两倍的内存。您应该严格避免在Android上使用枚举。因此,在设计用于替换枚举的地方,不能在声明中使用IntDefEnumIntDef