[英]Enums and android annotation intDef
我有一个枚举:
public enum AppEnums {
SERVICE_ERROR,
CONNECTION_ERROR;
}
我想在Android Annotation的intDef中使用它:
@IntDef({AppEnums.CONNECTION_ERROR, AppEnums.SERVICE_ERROR})
public @interface ServiceErrors {
}
错误显示:
找到不兼容的类型,必填:'long'
我能用这种不相容的方法做些什么?
我不想手动处理AppEnum参数的值,Enum通常会自动创建值。 AppEnums.CONNECTION_ERROR.ordinal()
返回enum参数的int值,但在此处不起作用。
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 - 适用于Android开发的新Enums。 枚举通常需要的内存是静态常量的两倍多。 你应该严格避免在Android上使用枚举 。 所以
IntDef
设计用于替换Enums,你不能在IntDef
声明中使用Enum
@Retention(RetentionPolicy.SOURCE)
@IntDef({NOT_STARTED, PENDING, COMPLETED})
public @interface DownloadState {
int NOT_STARTED = 1;
int PENDING = 2;
int COMPLETED = 3;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.