我维护一个大型文档存档,我经常使用位字段来记录处理期间或验证文档时的状态.我的遗留代码只使用静态int常量,例如:
static int DOCUMENT_STATUS_NO_STATE = 0
static int DOCUMENT_STATUS_OK = 1
static int DOCUMENT_STATUS_NO_TIF_FILE = 2
static int DOCUMENT_STATUS_NO_PDF_FILE = 4
Run Code Online (Sandbox Code Playgroud)
通过设置适当的标志,可以很容易地指示文档所处的状态.例如:
status = DOCUMENT_STATUS_NO_TIF_FILE | DOCUMENT_STATUS_NO_PDF_FILE;
Run Code Online (Sandbox Code Playgroud)
由于使用静态常量的方法是不好的做法,并且因为我想改进代码,所以我希望使用Enums来实现相同的目标.有一些要求,其中之一是需要将状态作为数字类型保存到数据库中.因此需要将枚举常量转换为数值.以下是我的第一种方法,我想知道这是否是正确的方法呢?
class DocumentStatus{
public enum StatusFlag {
DOCUMENT_STATUS_NOT_DEFINED(1<<0),
DOCUMENT_STATUS_OK(1<<1),
DOCUMENT_STATUS_MISSING_TID_DIR(1<<2),
DOCUMENT_STATUS_MISSING_TIF_FILE(1<<3),
DOCUMENT_STATUS_MISSING_PDF_FILE(1<<4),
DOCUMENT_STATUS_MISSING_OCR_FILE(1<<5),
DOCUMENT_STATUS_PAGE_COUNT_TIF(1<<6),
DOCUMENT_STATUS_PAGE_COUNT_PDF(1<<7),
DOCUMENT_STATUS_UNAVAILABLE(1<<8);
private final long statusFlagValue;
StatusFlag(long statusFlagValue) {
this.statusFlagValue = statusFlagValue;
}
public long getStatusFlagValue(){
return statusFlagValue;
}
}
/**
* Translates a numeric status code into a Set of StatusFlag enums
* @param numeric statusValue
* @return …Run Code Online (Sandbox Code Playgroud)