在项目的应用中,经常会用常量类来定义一些在变成中需要用到的常量值。
例如用1和0表示男孩女孩:
public static final int boy = 1;
public static final int girl = 0;
在很多的枚举类的文章中,用的例子都是星期的例子,这里结合在项目上的应用,使用一个审核状态的例子。
一个MIS系统中,信息需要走提交-审核-审核通过的流程,那么状态为New(N)-Audit(A)-Pass(P),那么使用枚举类的定义为:
public enum AuditState {
New("N"),Audit("A"),PASS("P"){
public boolean isOver(){
return true;
}
};
private String value;
private AuditState(String value){
this.value = value;
}
public String getValue() {
return value;
}
public boolean isOver(){
return false;
}
public AuditState getNextAuditState(){
if(value.equals("P")){
return null;
}
if(value.equals("A")){
return AuditState.PASS;
}
if(value.equals("N")){
return AuditState.Audit;
}
return null;
}
}
枚举类不仅可以在类中定义各个常量的值,还可以定义一些逻辑方法,方便使用,例如上面的isOver判断流程是否已经结束,getNextAuditState方法得到流程的下一个状态等。
枚举类有助于解决各个常量之间关系容易记不住的问题。例如审核过程中存在着多级审核,但是每一级审核驳回的都不一样。例如现在需要一级二级三级审核,一二级审核都是驳回到New状态,三级审核则是需要驳回到一级审核。如果没有对业务很熟悉的话很容易出现错误,而使用枚举类则可以定义一个获取驳回状态的方法:
public AuditState getRejectState(){
if(value.equals("AL3")){
return AuditState.Audit_Level_One;
}
return AuditState.New;
}
枚举类是Java提供的一种语法糖,经过反编译之后其实还是得到的最上面的那种定义方式,但是使用枚举类确实可以获得很多方便。