如何测试int是否包含在IntDef定义中

时间:2016-04-12 15:29:16

标签: android

采用以下示例。

错误消息

  

必须是以下之一:DownloadRequest.STATUS_UNKNOWN,   DownloadRequest.STATUS_DOWNLOADING,DownloadRequest.STATUS_COMPLETE,   DownloadRequest.STATUS_PAUSED,DownloadRequest.STATUS_CANCELLED,   DownloadRequest.STATUS_TEMP_PAUSED,DownloadRequest.STATUS_QUEUED

查询数据库

使用Cursor从数据库中提取数据并将其放入我的自定义类中。

request.setStatus(cursor.getInt(COLUMN_STATUS));

设置自定义构建器

此自定义类方法采用整数并设置其内部状态。整数由IntDef注释验证。

@NonNull
public Builder setStatus(@StatusEnum int status) {
    mInstance.mStatus = status;
    return this;
}

IntDef注释

@IntDef({STATUS_UNKNOWN, STATUS_DOWNLOADING, STATUS_COMPLETE, STATUS_PAUSED, STATUS_CANCELLED, STATUS_TEMP_PAUSED, STATUS_QUEUED})
@Retention(RetentionPolicy.SOURCE)
public @interface StatusEnum {}

问题

进入数据库的唯一值是StatusEnum注释给出的值。这在所有步骤中都经过验证。我仍然会验证来自数据库的信息。

如何测试IntDef定义中是否存在整数。我可以测试给定的整数是常量之一。但是,这将增加未来的代码维护。

1 个答案:

答案 0 :(得分:1)

很遗憾,您无法查看@IntDef的值,因为您可以在注释的源代码[1]中看到:

@Retention(SOURCE)
@Target({ANNOTATION_TYPE})
public @interface IntDef {
    /** Defines the allowed constants for this element */
    long[] value() default {};

    /** Defines whether the constants can be used as a flag, or just as an enum (the default) */
    boolean flag() default false;
}

标有SOURCERetentionPolicy

  

<强>来源
  编译器将丢弃注释。

因此,您无法在运行时进行迭代。