enum的一种应用

来源:互联网 发布:java中sleep的用法 编辑:程序博客网 时间:2024/06/06 03:02

功能:枚举类型有一种很给力的应用。如:最常见的审批流程(新建,审核中,审核通过)。在web开发时,页面显示的是审核中,审核通过这样的汉字。而数据库存储的往往是1(代表新建)这样的数字类型。这样做的好处是数据库存储方便,使用的空间小。然而为了增强代码的可读性,在实际代码中我们采用NEW,CHECKINGCHECKED这样的字段。Enum完美解决了这个问题。

例:

1.1实现类

public enum FlowStatus implements EnumPersistable<FlowStatus>{

NEW(1,"新建"),CHECKING(2,"审核中"),CHECKED(3,"审核通过");

private int val ;//存储

private String desc;//显示

private FlowStatus(int val,String desc) {

this.val = val;

this.desc=desc;

}

public String getDesc() {

return desc;

}

public Integer getVal(){

return val;

}

@Override

public FlowStatus getEnumVal(Integer val) {

switch(val) {

case 1:

return NEW;

case 2:

return CHECKING;

case 3:

return CHECKED;

}

return null;

}

 

@Override

public Integer getPersistVal() {

return this.val;

}

 

 

}

1.2接口:

public interface EnumPersistable<T extends Enum<?>> {

 

Integer getPersistVal() ;//获取val,存入数据库的数值

T getEnumVal(Integer val);//获取相对应的枚举类型,代码中应用的值

}

1.3Model

@Table(name = "CONTRACT")

public class Contract implements Serializable  {

 

private FlowStatus status//合同状态

 

@Column(name="CONTRACT_STATUS")

@Type(type="XXX.XXX.EnumIntValPersistType",

parameters = {

@Parameter(name="enumName",value="XXX.XXX.FlowStatus")

})

public FlowStatus getStatus() {

return status;

}

public void setStatus(FlowStatus status) {

this.status = status;

}

}

 

1.4转换类

public class EnumIntValPersistType implements ParameterizedType,Serializable {

private Class<Enum<?>> enumName = null;

private Method mehodOfGetPersistVal = null;

private Method methodOfGetEnumVal = null;

@Override

public void setParameterValues(Properties pty) {

if(pty != null) {

try {

enumName = (Class<Enum<?>>) Class.forName(pty.getProperty("enumName ").toString());

enumObj = enumName .getEnumConstants()[0];

this.mehodOfGetPersistVal = enumName .getMethod("getPersistVal");

this.methodOfGetEnumVal = enumClz.getMethod("getEnumVal"new Class[]{Integer.class});

catch (ClassNotFoundException e) {

e.printStackTrace();

catch (SecurityException e) {

e.printStackTrace();

catch (NoSuchMethodException e) {

e.printStackTrace();

}

}

}

0 0
原创粉丝点击