枚举和android注释intDef

我有一个枚举

public enum AppEnums { SERVICE_ERROR, CONNECTION_ERROR; } 

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

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

错误显示:

发现不兼容的types,要求:“长”

我可以用这种不兼容性做什么?

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

Solutions Collecting From Web of "枚举和android注释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 。 这是枚举types的一点。

我可以build议的是这样的:

 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上使用枚举 。 所以IntDef被devise来取代枚举,你不能在IntDef声明中使用Enum