采用以下示例。
必须是以下之一: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({STATUS_UNKNOWN, STATUS_DOWNLOADING, STATUS_COMPLETE, STATUS_PAUSED, STATUS_CANCELLED, STATUS_TEMP_PAUSED, STATUS_QUEUED})
@Retention(RetentionPolicy.SOURCE)
public @interface StatusEnum {}
进入数据库的唯一值是StatusEnum
注释给出的值。这在所有步骤中都经过验证。我仍然会验证来自数据库的信息。
如何测试IntDef定义中是否存在整数。我可以测试给定的整数是常量之一。但是,这将增加未来的代码维护。
答案 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;
}
标有SOURCE为RetentionPolicy
:
<强>来源
编译器将丢弃注释。
因此,您无法在运行时进行迭代。