繁体   English   中英

枚举和android注释intDef

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM